两个测试框架

苹果测试有两套:老牌 XCTest 用类加方法写测试;新的 Swift Testing 用函数加宏,写法更贴近 Swift 现代风格。老项目多半还是 XCTest,新项目可以直接上 Swift Testing。两者底层都跑在同一个测试引擎上,结果都能在 Xcode 里看到,不必纠结迁移时机,挑顺手的用就行。

Swift Testing 不是重写一切,而是让新测试写得更省力。

这篇把两套都过一遍。

XCTest 基础

XCTest 继承 XCTestCase,每个测试是一个方法,用 XCTAssert 断言。

func testTotal() {
  let cart = Cart()
  cart.add(price: 10)
  XCTAssertEqual(cart.total, 10)
}

这是大家最熟的写法。类里写一堆 test 开头的方法,断言写在方法里,跑测试时框架逐个调用。

Swift Testing 新写法

Swift Testing 用 @Test 标一个函数,断言直接写 expect,不用建类。函数名本身就是测试名,读起来像一句自然语言描述。

两套对比速查
  • XCTest类加方法,断言 XCTAssert。
  • Swift Testing函数加宏 @Test,断言 expect。
  • 参数化Swift Testing 一行遍历多组数据。

参数化测试

同一逻辑多组输入,Swift Testing 直接把参数列进去,自动跑每一组,不用复制粘贴多个方法。一组失败了它会告诉你是哪组数据出的问题,定位特别快。以前要写好几个长得差不多的测试方法,现在一个函数加几行数据就全搞定。

Swift Testing:发光测试仪表盘上绿色对勾光点呈柱状排列、旁为抽象测试用例卡片轮廓的蓝调插画
对勾成柱:多组参数一次跑完。