用途
Swift Testing 是一份代码仓库内的测试编写规范技能,回答“Swift 测试怎么写”。它明确区分职责:测什么由仓库自身的 testing-policy 决定;红-绿-重构循环用 tdd 技能;被测代码本身(SwiftUI、模型、并发)参考 swift-ios。
该技能的核心立场是:Swift Testing 每年多次发布新 API,而多数训练数据和博客仍停留在 XCTest,模型容易把 XCTest 的写法套用到 Swift Testing 上。因此它以规则清单的形式阻断这些错误直觉,并要求以已安装的工具链为准,而非记忆或滞后的官方文档。
主要能力
- 前置检查:读取工具链版本(swift --version、xcodebuild -version、Package.swift 的 swift-tools-version),据此决定新特性是否可用;检查测试目标的默认 actor 隔离设置;确认目标现有测试风格(新测试用 Swift Testing,已有 XCTest 除非是迁移任务否则保持原样)。
- 默认写法对照表,例如:用 struct + @Test 方法替代 class XCTestCase 与 XCTAssert;只在需要显示名称或附加 trait 时使用 @Suite;用 init()(可 async/throws)替代 setUp/tearDown,类上用 deinit,异步清理用作用域 trait;用 #expect 替代否定式断言以保留失败信息;用 try #require 替代 users.first! 和 XCTUnwrap;用具体错误(如 LoginError.locked)替代 Error.self;用 @Test(arguments:) 替代复制粘贴或 for 循环;用 await 真实工作、confirmation() 或返回 Task 并 await 替代 Task.sleep 与 XCTestExpectation;用消除共享状态替代 .serialized;.timeLimit 只能用分钟;@available 放在每个测试函数上而非套件上;用 .disabled 或 withKnownIssue 替代注释掉测试;测试 SwiftUI 时测其背后的 @Observable 模型或服务。
- 规则约束:XCTest 仅保留给 UI 自动化(XCUIApplication)、性能指标(XCTMetric、measure)和 Objective-C 测试;import Testing 只出现在测试目标;套件默认用 struct;#expect 为默认断言,try #require 用于后续无意义的前置条件与可选解包;参数化用输入输出元组数组,两个参数集合构成笛卡尔积,期望值用字面量;测试并行随机运行,共享可变状态即缺陷,需按测试注入;异步测试应 await 真实工作,回调 API 用 withCheckedContinuation 包装;通过公开或 @testable 内部 API 测试行为,不为测试在生产代码中加 nonisolated 访问器;单元测试不触碰网络、真实时钟与持久化存储;新增依赖需先获用户许可;新测试镜像生产目录结构。
- 审查模式:被要求审查测试时,按文件列出问题(行号、违反的规则、简短前后对比),跳过干净文件,最后给出按优先级排序的总结;被要求编写或修复测试时直接改代码,不产出报告。
- 参考资料导航:按任务指引到 fundamentals(套件结构、init/deinit、嵌套套件、@available)、expectations(断言选择、throws 测试、Issue.record、withKnownIssue)、parameterized(参数化与输入配对)、traits-and-tags(禁用、门控、标签、关联缺陷、测试计划)、async-and-concurrency(异步、回调、actor、confirmation、取消)、isolation-and-parallelism(不稳定或顺序依赖测试、.serialized 决策)、testing-app-code(@Observable 模型、服务、SwiftData、XCUITest 选择)、migrating-from-xctest(XCTest 迁移)、new-features(原始标识符、exit tests、附件、作用域 trait、范围确认)。
使用方式
作为技能加载到 AI 编码助手的工作流中,在编写、修复或审查 Swift 测试时激活;按“Where to look”表格加载对应 references 文件获取细节。
适用场景
Swift 项目的单元测试编写与审查、XCTest 向 Swift Testing 的迁移、异步与并发代码测试、参数化测试设计、不稳定的顺序依赖测试排查。
限制
该资料是测试编写规范,不定义具体仓库应测什么(依赖 testing-policy);不覆盖红-绿-重构流程(依赖 tdd);不覆盖被测代码实现(依赖 swift-ios);技能本身的安装与分发方式暂未提供。