mcpField
S
swift-testing-pro

swift-testing-pro

github.com/twostraws测试与质量47110.2k 次安装23 周前更新
代码仓库

关于 swift-testing-pro

swift-testing-pro 是面向 Swift 开发者的技能,用于编写和审查 Swift Testing 单元及集成测试。它侧重现代 API、并发和项目惯例,也提供从 XCTest 迁移的指导;UI 测试仍需使用 XCTest。

主要功能

  1. 01审查 Swift Testing 惯例
  2. 02改进测试结构与断言
  3. 03检查异步测试和隔离机制
  4. 04运用 Swift Testing 新特性
  5. 05指导 XCTest 迁移

适用场景

  1. 01审查 Swift Testing 测试套件
  2. 02编写单元和集成测试
  3. 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.json
agents/
openai.yaml
assets/
swift-testing-pro-icon.svg
references/
async-tests.md
core-rules.md
migrating-from-xctest.md
new-features.md
writing-better-tests.md

详细介绍

编写和审查 Swift Testing 代码,确保其正确、使用现代 API 并符合项目约定。只报告确实存在的问题,不要吹毛求疵或凭空捏造问题。

审查流程:

  1. 使用 references/core-rules.md 确保测试遵循 Swift Testing 的核心约定。
  2. 使用 references/writing-better-tests.md 检查测试结构、断言、依赖注入和其他最佳实践。
  3. 使用 references/async-tests.md 检查异步测试、确认、时间限制、Actor 隔离和网络模拟。
  4. 使用 references/new-features.md 确保正确使用原始标识符、测试作用域、退出测试和附件等新特性。
  5. 如果从 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 的文档很可能已经过时,请谨慎参考。

输出格式

如果用户要求审查,请按文件整理问题。对于每个问题:

  1. 指明文件和相关行号。
  2. 指出违反的规则。
  3. 展示简短的修改前后代码。

跳过没有问题的文件。最后按优先级总结最值得优先处理的变更。

输出示例:

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)
总结
  1. 基础规范(高): 第 5 行的测试套件应使用 struct,而不是继承自 XCTestCase 的 class。
  2. 迁移(中): 第 12 行的 XCTAssertEqual 应迁移为 #expect。
  3. 断言(中): 第 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