Swift Testing 是苹果推出的一个新框架,旨在跨平台现代化 Swift 的测试

Swift Testing 框架概述

Swift Testing 是苹果推出的一个新的测试框架,旨在为所有支持 Swift 的平台提供一个表达性强且直观的 API。虽然 XCTest 仍然是 Xcode 中创建测试的首选方式,但 Swift Testing 提供了更多高级功能,如参数化、并行化、分类以及将测试与 Bug 关联等。

主要功能

参数化测试

Swift Testing 允许通过 @Test 宏进行参数化测试。测试可以接受多个输入参数,并针对每个参数组合运行测试。例如:

@Test("Sample test", arguments: [
    "input string 1",
    "input string 2",
    "input string 3"
])
func sampleTest(sampleInput: String) {
    ...
}

此测试将运行三次,每次使用不同的输入。此外,还可以处理多个输入集合,测试函数将接收每个集合中的一个参数,并运行所有可能的组合。

选择性运行参数化测试

在某些情况下,可以选择性地运行参数化测试,而不必运行所有可能的输入组合。

测试特性(Traits)

@Test 宏支持为测试函数关联特性(Traits)。这些特性可以基于运行时条件启用或禁用测试、限制测试的运行时间、串行或并行运行测试,以及将测试与 Bug 关联等。例如:

@Test(.enabled(if: App.ConditionToMatch))
func conditionalTest() {
    ...
}

开发者还可以通过实现符合 TestTrait 协议的类型来定义自己的特性。

测试组织与管理

测试套件(Test Suites)

测试函数可以组织成测试套件。传统方法是将它们放在同一个测试 class 中,Swift Testing 提供了 @Suite 宏来实现这一目的。测试套件中的所有测试函数继承相同的特性,如 tags(_:)disabled(_:sourceLocation:)

验证测试结果

Swift Testing 提供了两个宏 expectrequire 来验证测试结果。require 在条件不满足时抛出异常并停止测试执行,而 expect 则打印详细信息。

注意事项

  • 测试函数不会在发布构建中被剥离:因此,苹果强烈建议将测试库导入到不与主可执行文件链接的测试目标中。
  • 与 XCTest 的兼容性:Swift Testing 和 XCTest 可以在同一个项目中共存,开发者无需迁移现有测试即可采用新框架。

资源与要求

Swift Testing 可在 GitHubSwift Package Index 上获取,要求 Swift 6。

总结

Swift Testing 是一个功能丰富的测试框架,提供了参数化、并行化、测试特性等高级功能,帮助开发者更高效地编写和管理测试。虽然它与 XCTest 兼容,但开发者应注意测试函数在发布构建中的处理方式。

阅读 46
0 条评论