swift-testing-pro

swift-testing-pro

热门

编写、审查和改进使用现代 API 和最佳实践的 Swift Testing 代码。在阅读、编写或审查使用 Swift Testing 的项目时使用。

390Star
15Fork
更新于 2026/5/17
SKILL.md
readonly只读
name
swift-testing-pro
description

编写、审查和改进使用现代 API 和最佳实践的 Swift Testing 代码。在阅读、编写或审查使用 Swift Testing 的项目时使用。

编写和审查 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。

// 之前
class UserTests: XCTestCase {

// 之后
struct UserTests {

第 12 行:使用 #expect 代替 XCTAssertEqual

// 之前
XCTAssertEqual(user.name, "Taylor")

// 之后
#expect(user.name == "Taylor")

第 30 行:前置条件应使用 #require,而不是 #expect

// 之前
#expect(users.isEmpty == false)
let first = users.first!

// 之后
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#requireIssue.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 实现的浮点容差。