SKILL.md
readonly只读
name
swift-testing-pro
description
编写、审查和改进使用现代 API 和最佳实践的 Swift Testing 代码。在阅读、编写或审查使用 Swift Testing 的项目时使用。
编写和审查 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。
// 之前
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)
摘要
- 基础(高): 第 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 实现的浮点容差。






