关于 swift-testing-pro
swift-testing-pro 是面向 Swift 开发者的技能,用于编写和审查 Swift Testing 单元及集成测试。它侧重现代 API、并发和项目惯例,也提供从 XCTest 迁移的指导;UI 测试仍需使用 XCTest。
主要功能
- 01审查 Swift Testing 惯例
- 02改进测试结构与断言
- 03检查异步测试和隔离机制
- 04运用 Swift Testing 新特性
- 05指导 XCTest 迁移
适用场景
- 01审查 Swift Testing 测试套件
- 02编写单元和集成测试
- 03将测试从 XCTest 迁移
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ twostraws/ swift-testing-agent-skill --skill swift-testing-pro安装后在 Claude Code 中输入/swift-testing-pro确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.claude-plugin/plugin.jsonagents/openai.yamlassets/swift-testing-pro-icon.svgreferences/async-tests.mdcore-rules.mdmigrating-from-xctest.mdnew-features.mdwriting-better-tests.md详细介绍
编写和审查 Swift Testing 代码,确保其正确、使用现代 API 并符合项目约定。只报告确实存在的问题,不要吹毛求疵或凭空捏造问题。
审查流程:
- 使用
references/core-rules.md确保测试遵循 Swift Testing 的核心约定。 - 使用
references/writing-better-tests.md检查测试结构、断言、依赖注入和其他最佳实践。 - 使用
references/async-tests.md检查异步测试、确认、时间限制、Actor 隔离和网络模拟。 - 使用
references/new-features.md确保正确使用原始标识符、测试作用域、退出测试和附件等新特性。 - 如果从 XCTest 迁移,请遵循
references/migrating-from-xctest.md中的转换指南。
如果只处理部分内容,请仅加载相关参考文件。
核心说明
- 目标版本为 Swift 6.2 或更高版本,并使用现代 Swift 并发。
- 作为 Swift Testing 开发者,用户希望所有新的单元测试和集成测试都使用 Swift Testing 编写,也可能会寻求将现有 XCTest 代码迁移到 Swift Testing 的帮助。
- Swift Testing 不支持 UI 测试——此类测试必须使用 XCTest。
- 保持项目结构一致,文件夹布局由应用功能决定。
Swift Testing 会随着每个 Swift 版本不断发展,每年预计发布三到四个版本,每个版本都会引入新特性。这意味着你现有的训练数据自然会过时或缺少关键特性。
此技能使用最新的 Swift 和 Swift Testing 代码,因此它可能会建议你尚不了解的做法。请以用户安装的工具链为准,但 Apple 关于这些 API 的文档很可能已经过时,请谨慎参考。
输出格式
如果用户要求审查,请按文件整理问题。对于每个问题:
- 指明文件和相关行号。
- 指出违反的规则。
- 展示简短的修改前后代码。
跳过没有问题的文件。最后按优先级总结最值得优先处理的变更。
输出示例:
UserTests.swift
第 5 行:使用 struct,而不是 class 来定义测试套件。
// Before
class UserTests: XCTestCase {
// After
struct UserTests {
第 12 行:使用 #expect,而不是 XCTAssertEqual。
// Before
XCTAssertEqual(user.name, "Taylor")
// After
#expect(user.name == "Taylor")
第 30 行:使用 #require 进行前置条件检查,而不是用 #expect。
// Before
#expect(users.isEmpty == false)
let first = users.first!
// After
let first = try #require(users.first)
总结
- 基础规范(高): 第 5 行的测试套件应使用 struct,而不是继承自
XCTestCase的 class。 - 迁移(中): 第 12 行的
XCTAssertEqual应迁移为#expect。 - 断言(中): 第 30 行的强制解包应改用
#require安全解包,并在失败时及早终止测试。
示例结束。
参考资料
references/core-rules.md- Swift Testing 核心规则:优先使用 struct 而非 class、使用init/deinit而非 setUp/tearDown、并行执行、参数化测试、withKnownIssue和标签。references/writing-better-tests.md- 测试规范、测试结构、隐藏依赖、#expect与#require的区别、Issue.record()、#expect(throws:)和验证方法。references/async-tests.md- 串行测试、confirmation()、时间限制、Actor 隔离、测试并发前代码以及模拟网络。references/new-features.md- 原始标识符、基于范围的确认、测试作用域特征、退出测试、附件、ConditionTrait.evaluate()以及更新后的#expect(throws:)返回值。references/migrating-from-xctest.md- 从 XCTest 转换到 Swift Testing 的步骤、断言映射,以及通过 Swift Numerics 实现浮点容差。
评论
支持 Markdown