主要观点:正在从 XCTest 迁移到 Swift Testing,基本迁移较易,部分情况无需更改测试方法代码,且可利用自身辅助函数替代 XCTest 的部分方法,但迁移过程中仍存在一些问题。
关键信息:
- Swift Testing 基本迁移易,可复用自身辅助函数且更简洁,可在
#expect()
等之上重新实现辅助函数。 - 虽支持结构体但也可用类作为测试套件,可利用公共基类提供标准功能,各项目子类有自身测试数据和特定功能。
- 迁移中存在一些不直接的问题,如浮点相等性无等效方法、隐式解包可选类型处理仍需改进、确认方式与期望不同、同一进程中并行测试的处理等。
- 对于全局状态处理,XCTest 可使用常规静态属性,Swift Testing 需使用任务本地属性,但在不支持 Swift Concurrency 的 macOS 版本上存在编译错误及设置困难等问题。
重要细节: - Swift Testing 不支持
XCTAssertEqual(_:_:accuracy:)
,可能等待语言支持近似相等。 - 在测试子类中使用隐式解包可选类型时,仍存在问题,初始化顺序与 Swift 初始化规则不符。
- Swift Testing 的确认方式只能一次等待一个,且不运行运行循环,需重写测试。
- 同一进程中并行测试,XCTest 在不同进程,Swift Testing 需使用
.serialized
特质,否则全局状态可能导致问题。 - 在不支持 Swift Concurrency 的 macOS 版本上,设置任务本地属性存在编译错误,且难以简洁设置值。
更新信息:Swift Testing 尚未有 XCTest 的类级+setUp
和+tearDown
API;有人体验不佳,如调用时崩溃、比 XCTest 慢等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。