SuperAPI AI 工具集

swift-testing-pro

测试与质量

查看项目

更新于 10-15 10:54

技能介绍

用途

本技能用于编写、评审和改进 Swift Testing 代码,关注正确性、现代 API 用法以及对项目约定的遵循。适用于读取、编写或评审使用 Swift Testing 的项目。评审时只报告真实存在的问题,不做吹毛求疵的挑错,也不凭空编造问题。

主要能力与评审流程

评审过程按以下方面展开:

  1. 依据 references/core-rules.md,确保测试遵循 Swift Testing 的核心约定。
  2. 依据 references/writing-better-tests.md,校验测试结构、断言、依赖注入等最佳实践。
  3. 依据 references/async-tests.md,检查异步测试、confirmation、时间限制、actor 隔离和网络 mock。
  4. 依据 references/new-features.md,确保 raw identifiers、test scopes、exit tests、attachments 等新特性被正确使用。
  5. 若从 XCTest 迁移,参照 references/migrating-from-xctest.md 中的转换指引。

如果是部分工作,只需加载相关的参考文件。

核心指令

  • 目标为 Swift 6.2 或更高版本,使用现代 Swift 并发。
  • 作为 Swift Testing 开发者,用户希望所有新的单元测试和集成测试都使用 Swift Testing 编写,也可能请求帮助把现有的 XCTest 代码迁移到 Swift Testing。
  • Swift Testing 不支持 UI 测试,UI 测试必须使用 XCTest。
  • 使用一致的项目结构,文件夹布局由应用功能决定。
  • Swift Testing 随每次 Swift 发布而演进,预计每年有三到四个版本,每个版本引入新特性;这意味着既有的训练数据自然会过时或缺少关键特性。
  • 本技能专门依据最新的 Swift 和 Swift Testing 代码,因此会给出你可能并不了解的建议。应以用户实际安装的工具链为准,但苹果关于这些 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 和 tags。
  • references/writing-better-tests.md:测试卫生、测试组织、隐藏依赖、#expect 与 #require 的区别、Issue.record()、#expect(throws:) 以及验证方法。
  • references/async-tests.md:串行化测试、confirmation()、时间限制、actor 隔离、测试并发前的代码以及网络 mock。
  • references/new-features.md:raw identifiers、基于范围的 confirmation、test scoping traits、exit tests、attachments、ConditionTrait.evaluate() 以及更新后的 #expect(throws:) 返回值。
  • references/migrating-from-xctest.md:XCTest 到 Swift Testing 的转换步骤、断言映射以及通过 Swift Numerics 实现浮点容差。

适用场景与限制

适用于使用 Swift Testing 编写单元测试和集成测试、评审相关测试代码,以及从 XCTest 迁移到 Swift Testing 的场景。目标环境为 Swift 6.2 或更高版本。限制在于:Swift Testing 不支持 UI 测试,UI 测试仍需使用 XCTest。关于本技能的版本、收费与价格等更多信息,资料中暂未提供。