XCTest

XCTest 库旨在为使用 Swift 编写单元测试提供一个通用框架,适用于 Swift 包和应用程序。

此版本的 XCTest 实现了 Xcode 7 及更高版本中 XCTest 包含的大多数单元测试 API。其目标是使你的项目测试能够在 Swift 支持的所有平台上运行,而无需重写它们。

使用 XCTest

你的测试被组织成一个简单的层级结构。每个 XCTestCase 子类都有一组 test 方法,每个方法都应该测试你代码的一部分。

有关使用 XCTest 的一般信息,请参阅

将 XCTest 与 Swift Package Manager 结合使用

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"}

为 XCTest 做贡献

要做贡献,你需要能够构建此项目并运行其测试套件。最简单的方法是通过 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

要使用 Xcode 浏览此项目中的文件,请使用 XCTest.xcworkspace。你可以使用 SwiftXCTest scheme 构建项目。运行 SwiftXCTestFunctionalTests scheme 来运行测试。

然而,为了在 Xcode 中成功构建项目,**你必须使用带有极新版本 Swift 的 Xcode 工具链**。Swift 网站提供了Xcode 工具链下载,以及有关如何将 Xcode 与这些工具链一起使用的说明。Swift 开发进展相当快,因此即使是一周前的工具链也可能不再有效。

如果没有可供下载的工具链足够新以构建 XCTest,你可以通过使用 Swift 仓库中的 utils/build-toolchain 脚本 构建自己的工具链。

请记住,无论你安装了哪个 Swift 工具链,上面“为 XCTest 做贡献”中的构建脚本调用都将始终有效。Xcode 工作区仅为了方便贡献者而存在。为了做贡献,不必在 Xcode 中成功构建此项目。