ITADN
swiftlang/swift-testing
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Swift Testing

Swift Testing 是一个提供富有表现力且直观的 API 的包,使测试 你的 Swift 代码变得轻而易举。

CI status badge for main branch using main toolchain CI status badge for main branch using 6.3 toolchain

功能概览

清晰、富有表现力的 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 工具链。

此项目的其他文档资源可以在 READMEDocumentation/ 子目录中找到。

Footnotes

  1. 大多数平台具有“自动化”验证,其中持续集成 会自动验证项目构建并通过了所有测试。这 确保任何更改都符合我们最高的质量标准,因此这是 我们所有受支持平台的目标。

    目前,一些平台依赖手动测试(“自动化(仅构建)” 验证)或手动构建和测试(“手动”验证)。