迈克尔·蔡 - 博客 - 采用 Swift 测试时的问题

主要观点:正在从 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+tearDownAPI;有人体验不佳,如调用时崩溃、比 XCTest 慢等。
阅读 3
0 条评论