用途:把 XCTest 测试迁移为 Swift Testing,或更新已有 Swift Testing 测试以符合推荐模式。UI 测试(使用 XCUIAutomation)与使用 measure{...} 性能 API 的测试无法迁移,须保留为 XCTest;同一 XCTestCase 中不涉及性能 API 的其他测试可迁移。
主要能力与用法: 导入:将 import XCTest 替换为 import Testing;增量迁移时同一文件可同时导入两者。移除 XCTest 导入后若用到 Foundation 类型(URL、Data 等),需加 import Foundation,因为 XCTest 会再导出 Foundation。 结构:删除 XCTestCase 继承,优先用 struct;把 setUp/tearDown 移到 init/deinit,需要 deinit 时改用 actor 或 final class;存储属性改为非隐式解包类型并就地或在初始化器中赋值;测试函数如需修改实例属性可标记 mutating。用 @Test 替代 test 前缀,句子式多词名称可用反引号标识符。 断言映射:XCTAssert/True 变 #expect;False 变 #expect(!x);Nil/NotNil 变 ==nil/!=nil;Equal/NotEqual 变 ==/!=;Identical 变 ===;比较变对应运算符;try XCTUnwrap 变 try #require。XCTAssertEqual(::accuracy:) 无直接等价,用浮点运算。 错误:优先校验具体错误值,可用 #expect(throws:) 闭包、相等错误或捕获返回错误;无抛错用 throws: Never.self。continueAfterFailure=false 时后续断言需改为 try #require 并给方法加 throws。将可转换的 Issue.record/XCTFail 改为 #expect 或 #require;不要将 try #require 改成 #expect。 异步与跳过:expectation+fulfill+fulfillment 改为 confirmation,含预期次数时用范围;XCTSkipIf/Unless 改为 .disabled(if:)/.enabled(if:) 特性,中途跳过用 Test.cancel,平台或系统版本条件改用 @available。XCTExpectFailure 改为 withKnownIssue,间歇失败用 isIntermittent: true,可用 when/matching。并发:XCTest 同步测试默认主线程且串行,Swift Testing 在任意任务上并行;仅在原本依赖主线程隔离时加 @MainActor,共享状态用 @Suite(.serialized)。附件:XCTAttachment 与 add 改为 Attachment.record,类型须符合 Attachable。
指南:一次迁移一个测试类,文件可混合两种测试;除非需要 tearDown 否则优先 struct;循环或重复逻辑可改为 @Test(arguments:) 参数化测试;只用公开 API,源码位置用完整 SourceLocation 初始化器,不引入 #_sourceLocation。复杂任务可分给多个代理处理。
限制:官方未提供具体命令或安装步骤,暂未提供。