swift-testing-pro

swift-testing-pro

熱門

使用現代 API 與最佳實務撰寫、審查及改善 Swift Testing 程式碼。適用於閱讀、撰寫或審查使用 Swift Testing 的專案。

390星標
15分支
更新於 2026/5/17
SKILL.md
readonlyread-only
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 檢查非同步測試、確認(confirmation)、時間限制、actor 隔離及網路 mock。
  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#require 的選擇、Issue.record()#expect(throws:) 與驗證方法。
  • references/async-tests.md - 序列化測試、confirmation()、時間限制、actor 隔離、測試前並行程式碼、網路 mock。
  • references/new-features.md - 原始識別碼、基於範圍的確認、測試範圍特性、退出測試、附件、ConditionTrait.evaluate() 與更新後的 #expect(throws:) 回傳值。
  • references/migrating-from-xctest.md - XCTest 轉換至 Swift Testing 的步驟、斷言對應表,以及透過 Swift Numerics 處理浮點數容差。