Swift Testing

Swift Testing 是一个程序包,它具有富有表现力且直观的 API,可让您轻松测试 Swift 代码。

功能概述

清晰、富有表现力的 API

Swift Testing 具有清晰且富有表现力的 API,该 API 使用宏构建,因此您可以用少量代码声明复杂的行为。#expect API 使用 Swift 表达式和运算符,并捕获评估值,以便您可以快速了解测试失败时出了什么问题。

@Test func helloWorld() {
  let greeting = "Hello, world!"
  #expect(greeting == "Hello") // Expectation failed: (greeting → "Hello, world!") == "Hello"
}

自定义测试行为

您可以使用代码中指定的特征来自定义测试或测试套件的行为。特征可以描述测试的运行时条件,例如测试应在哪个设备上运行,或将测试限制为某些操作系统版本。特征还可以通过为测试指定执行时间限制来帮助您有效地使用持续集成。

@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 Concurrency 无缝集成,并默认并行运行。

@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,因此您的测试在平台之间移动时可以表现得更加一致。它是作为开源开发的,并在 Swift 论坛 上进行讨论,因此来自任何地方的最佳想法都可以帮助塑造 Swift 测试的未来。

下表描述了 Swift Testing 对各种平台当前的支持级别

平台 CI 状态 (6.0) CI 状态 (主分支) 支持状态
macOS Build Status Build Status 支持
iOS 支持
watchOS 支持
tvOS 支持
visionOS 支持
Ubuntu 22.04 Build Status Build Status 支持
Windows Build Status 支持
Wasm 实验性

与 XCTest 协同工作

如果您已经有使用 XCTest 编写的测试,则可以将它们与使用 Swift Testing 编写的较新测试并排运行。这有助于您按照自己的节奏逐步迁移测试。

文档

有关 Swift Testing 的详细文档,请访问 Swift Package Index。在那里,您可以深入研究全面的指南、教程和 API 参考,以充分利用此程序包。Swift Testing 包含在 Swift 6 工具链和 Xcode 16 中。您无需将其作为程序包依赖项添加到您的 Swift 程序包或 Xcode 项目中。

重要提示

Swift Testing 依赖于即将推出的语言和编译器功能。如果您要从源代码构建 Swift Testing,请注意此存储库的 main 分支需要最新的 main 分支开发快照 工具链。

有关此项目的其他文档资源,请参阅 Documentation/ 子目录的 README