XCTest 库旨在为使用 Swift 编写单元测试提供一个通用框架,适用于 Swift 包和应用程序。
此版本的 XCTest 实现了 Xcode 7 及更高版本中 XCTest 包含的大多数单元测试 API。其目标是使你的项目测试能够在 Swift 支持的所有平台上运行,而无需重写它们。
你的测试被组织成一个简单的层级结构。每个 XCTestCase
子类都有一组 test
方法,每个方法都应该测试你代码的一部分。
有关使用 XCTest 的一般信息,请参阅
Swift Package Manager 直接与 XCTest 集成,为 SwiftPM 包的单元测试提供简化的体验。如果你在 SwiftPM 包中使用 XCTest,单元测试文件位于包的 Tests
子目录中,你可以通过运行 swift test
一步构建并运行完整的测试套件。
有关将 XCTest 与 SwiftPM 结合使用的更多信息,请参阅其文档。
当单独使用时,不与 SwiftPM 结合使用,此版本的 XCTest 不使用 Xcode 附带的外部 xctest
CLI 测试运行器来运行测试。相反,你必须创建自己的可执行文件,该文件链接 libXCTest.so
,并在你的 main.swift
中,使用你想运行的所有 XCTestCase
子类的测试数组调用 XCTMain
函数,并用 testCase
辅助函数包装。例如
XCTMain([
testCase(TestNSString.allTests),
testCase(TestNSArray.allTests),
testCase(TestNSDictionary.allTests),
])
XCTMain
函数不返回,并且将导致你的测试可执行文件以 0
(成功)或 1
(失败)退出。某些命令行参数可用于修改测试运行器的行为
$ ./FooTests Tests.FooTestCase/testFoo # Run a single test method
$ ./FooTests Tests.FooTestCase # Run all the tests in FooTestCase
$ ./FooTests Tests.FooTestCase/testFoo,Tests.FooTestCase/testBar # Run multiple test methods
$ ./FooTests --list-tests
Listing 4 tests in FooTests.xctest:
Tests.FooTestCase/testFoo
Tests.FooTestCase/testBar
Tests.BarTestCase/test123
$ ./FooTests --dump-tests-json
{"tests":[{"tests":[{"tests":[{"name":"testFoo"},{"name":"testBar"}],"name":"Tests.FooTestCase"},{"tests":[{"name":"test123"}],"name":"Tests.BarTestCase"}],"name":"Tests.xctest"}],"name":"All tests"}
要做贡献,你需要能够构建此项目并运行其测试套件。最简单的方法是通过 Swift 构建脚本。
首先,按照 Swift README 中的说明 从源代码构建 Swift。确认你能够使用 utils/build-script -R
构建 Swift 项目。
一旦你能够构建 Swift 项目,构建 XCTest 并运行其测试
$ cd swift-corelibs-xctest
$ ../swift/utils/build-script --preset corelibs-xctest
此项目仅保证能够使用 Swift 和 swift-corelibs-foundation main
分支上的最新提交构建。你可以使用 Swift utils/update-checkout
脚本更新到最新提交
$ ../swift/utils/update-checkout
要使用 Xcode 浏览此项目中的文件,请使用 XCTest.xcworkspace
。你可以使用 SwiftXCTest
scheme 构建项目。运行 SwiftXCTestFunctionalTests
scheme 来运行测试。
然而,为了在 Xcode 中成功构建项目,**你必须使用带有极新版本 Swift 的 Xcode 工具链**。Swift 网站提供了Xcode 工具链下载,以及有关如何将 Xcode 与这些工具链一起使用的说明。Swift 开发进展相当快,因此即使是一周前的工具链也可能不再有效。
如果没有可供下载的工具链足够新以构建 XCTest,你可以通过使用 Swift 仓库中的
utils/build-toolchain
脚本 构建自己的工具链。请记住,无论你安装了哪个 Swift 工具链,上面“为 XCTest 做贡献”中的构建脚本调用都将始终有效。Xcode 工作区仅为了方便贡献者而存在。为了做贡献,不必在 Xcode 中成功构建此项目。