Swift Testing
Swift Testing 是一个提供富有表现力且直观的 API 的包,使测试 你的 Swift 代码变得轻而易举。
功能概览
清晰、富有表现力的 API
Swift Testing 提供了一个基于宏构建的清晰且富有表现力的 API,因此你可以
用少量代码声明复杂的行为。#expect API 使用
Swift 表达式和运算符,并捕获求值后的值,以便你在测试失败时
快速理解哪里出了问题。
import Testing
@Test func helloWorld() {
let greeting = "Hello, world!"
#expect(greeting == "Hello") // Expectation failed: (greeting → "Hello, world!") == "Hello"
}
自定义测试行为
你可以使用代码中指定的特性(traits)来自定义测试或测试套件的行为。特性可以描述测试的运行时条件,例如测试应在哪个设备上运行,或将测试限制在特定的操作系统版本上。特性还可以通过为测试指定执行时间限制,帮助你更有效地使用持续集成。
@Test(.enabled(if: AppFeatures.isCommentingEnabled))
func videoCommenting() async throws {
let video = try #require(await videoLibrary.video(named: "A Beach"))
#expect(video.comments.contains("So picturesque!"))
}
轻松且灵活的组织方式
Swift Testing 提供了多种方式来保持测试的组织性。使用组和子组的层级结构来组织相关的测试。应用标签以灵活地管理、编辑和运行测试套件中具有共同特征的测试,例如针对特定设备或使用特定模块的测试。你还可以为测试提供描述性名称,以便一眼就能了解它们的功能。
@Test("Check video metadata",
.tags(.metadata))
func videoMetadata() {
let video = Video(fileName: "By the Lake.mov")
let expectedMetadata = Metadata(duration: .seconds(90))
#expect(video.metadata == expectedMetadata)
}
可扩展的覆盖范围与执行
参数化测试可帮助你对一系列值运行相同的测试,从而减少代码量。并且所有测试都能与 Swift 并发无缝集成,并默认并行运行。
@Test("Continents mentioned in videos", arguments: [
"A Beach",
"By the Lake",
"Camping in the Woods"
])
func mentionedContinents(videoName: String) async throws {
let videoLibrary = try await VideoLibrary()
let video = try #require(await videoLibrary.video(named: videoName))
#expect(video.mentionedContinents.count <= 3)
}
跨平台支持
Swift Testing 包含在官方支持的 Swift 工具链中,包括
适用于 Apple 平台、Linux 和 Windows 的工具链。要使用该库,请导入
Testing 模块:
import Testing
使用 Swift Testing 无需声明包依赖。它以开源方式开发,并在 Swift 论坛 上讨论,因此来自任何地方的最佳想法都能帮助塑造 Swift 测试的未来。
下表描述了 Swift Testing 当前对各种平台的支持级别:
| 平台 | 支持状态 | 验证1 |
|---|---|---|
| Apple 平台 | 支持 | 自动化 |
| Linux | 支持 | 自动化 |
| FreeBSD | 支持 | 自动化 |
| Windows | 支持 | 自动化 |
| Wasm | 实验性 | 自动化(仅构建) |
| Android | 实验性 | 自动化(仅构建) |
| OpenBSD | 实验性 | 手动 |
与 XCTest 兼容
如果您已经使用 XCTest 编写了测试,您可以将其与使用 Swift Testing 编写的新测试并行运行。这有助于您按照自己的节奏逐步迁移测试。
文档
Swift Testing 的详细文档可以在 Swift Package Index 上找到。 在那里,您可以深入了解全面的指南、教程和 API 参考, 以充分利用此包。Swift Testing 包含在 Swift 6 工具链和 Xcode 16 中。您不需要将其作为包依赖项添加到 您的 Swift 包或 Xcode 项目中。
[!IMPORTANT] Swift Testing 依赖于即将推出的语言和编译器功能。如果您正在 从源代码构建 Swift Testing,请注意此 仓库的主分支需要最近的 main-branch development snapshot 工具链。
此项目的其他文档资源可以在
README
的 Documentation/ 子目录中找到。
Footnotes
-
大多数平台具有“自动化”验证,其中持续集成 会自动验证项目构建并通过了所有测试。这 确保任何更改都符合我们最高的质量标准,因此这是 我们所有受支持平台的目标。
目前,一些平台依赖手动测试(“自动化(仅构建)” 验证)或手动构建和测试(“手动”验证)。 ↩