关于 swift-testing-expert
swift-testing-expert 是使用现代 Swift Testing API 编写、审查、迁移和调试 Swift 测试的技能,适用于 Swift 开发者。它侧重可读且支持并行的测试,并提供渐进式 XCTest 迁移指导。
主要功能
- 01使用 Swift Testing 断言与测试套件
- 02设计参数化测试和特征
- 03改善并行安全性与隔离
- 04调试异步测试和不稳定失败
- 05规划渐进式 XCTest 迁移
适用场景
- 01用参数化测试替换重复用例
- 02诊断共享资源导致的不稳定测试
- 03分阶段迁移 XCTest 断言
- 04为异步测试桥接回调 API
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ avdlee/ swift-testing-agent-skill --skill swift-testing-expert安装后在 Claude Code 中输入/swift-testing-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/_index.mdasync-testing-and-waiting.mdexpectations.mdfundamentals.mdmigration-from-xctest.mdparallelization-and-isolation.mdparameterized-testing.mdperformance-and-best-practices.mdtraits-and-tags.mdxcode-workflows.md详细介绍
Swift Testing
概述
使用此技能,通过现代 Swift Testing API 编写、审查、迁移和调试 Swift 测试。优先考虑可读的测试、可靠的并行执行、清晰的诊断信息,并在需要时从 XCTest 逐步迁移。
Agent 行为约定(遵循以下规则)
- Swift 单元测试和集成测试优先使用 Swift Testing,但 UI 自动化(
XCUIApplication)、性能指标(XCTMetric)和仅包含 Objective-C 的测试代码仍使用 XCTest。 - 将
#expect作为默认断言;当后续代码依赖某个前置值时,使用#require。 - 默认提供适用于并行执行的指导。如果测试未隔离,应先建议修复共享状态,再使用
.serialized。 - 优先使用 trait 表达行为和元数据(
.enabled、.disabled、.timeLimit、.bug、标签),而非命名约定或临时注释。 - 当多个测试共享逻辑、仅输入值不同时,建议使用参数化测试。
- 对受操作系统版本限制的行为,在测试函数上使用
@available,而不是在测试主体中进行运行时#available检查;切勿在测试套件类型上添加@available。 - 保持迁移建议循序渐进:先转换断言,再整理测试套件,最后引入参数化和 trait。
- 仅在测试目标中导入
Testing,绝不要在应用、库或二进制目标中导入。
前 60 秒(初步诊断模板)
- 明确目标:编写新测试、迁移、处理不稳定失败、性能、CI 筛选,还是异步等待。
- 收集最少必要信息:
- Xcode/Swift 版本和平台目标
- 当前使用 XCTest、Swift Testing,还是两者兼用
- 失败是稳定复现还是时有时无
- 测试是否访问共享资源(数据库、文件、网络、全局状态)
- 快速分流:
- 重复测试 -> 参数化测试
- 嘈杂或不稳定的失败 -> 已知问题处理和测试隔离
- 迁移问题 -> XCTest 对照和共存策略
- 异步回调复杂 -> continuation/await 模式
路由图(快速查阅合适的参考资料)
- 测试基本构件和测试套件组织 ->
references/fundamentals.md #expect、#require和抛出异常的预期 ->references/expectations.md- Trait、标签和 Xcode 测试计划筛选 ->
references/traits-and-tags.md - 参数化测试设计和组合方式 ->
references/parameterized-testing.md - 默认并行执行、
.serialized、隔离策略 ->references/parallelization-and-isolation.md - 测试速度、确定性和防止不稳定 ->
references/performance-and-best-practices.md - 异步等待和回调桥接 ->
references/async-testing-and-waiting.md - XCTest 共存和迁移工作流 ->
references/migration-from-xctest.md - 测试导航器/报告工作流和诊断信息 ->
references/xcode-workflows.md - 索引和快速导航 ->
references/_index.md
常见问题 -> 下一步建议
- 重复的
testFooCaseA/testFooCaseB/...方法 -> 替换为一个参数化的@Test(arguments:)。 - 后续断言中才暴露的可选值前置条件失败 -> 使用
try #require(...),然后断言解包后的值。 - 共享数据库上的不稳定集成测试 -> 隔离依赖项或使用内存仓库;仅将
.serialized作为过渡措施。 - 被禁用后悄然失效的测试 -> 对临时已知失败优先使用
withKnownIssue,以保留测试信号。 - 复杂类型的失败值不清晰 -> 让类型遵循
CustomTestStringConvertible,以获得聚焦的测试诊断信息。 - 按名称设置测试计划的包含/排除项 -> 改用标签和基于标签的筛选。
验证清单
- 确认每个测试都只验证一种明确行为,并在需要时使用能清晰表达含义的显示名称。
- 确认在失败时应停止测试的前置条件使用
#require。 - 确认重复逻辑已参数化,而非重复编写。
- 确认测试可安全并行运行,或有意串行运行并说明原因。
- 确认异步代码已等待完成,且回调 API 已安全桥接。
- 确认迁移时,XCTest 独有且不受支持的场景仍保留在 XCTest 中。
参考资料
references/_index.mdreferences/fundamentals.mdreferences/expectations.mdreferences/traits-and-tags.mdreferences/parameterized-testing.mdreferences/parallelization-and-isolation.mdreferences/performance-and-best-practices.mdreferences/async-testing-and-waiting.mdreferences/migration-from-xctest.mdreferences/xcode-workflows.md
评论
支持 Markdown