Swift Test Suite Builder
Swift Testing Standards

Write XCTest cases, async tests, and organized test suites in Swift. Use when writing XCTest cases, async tests, or organizing test suites in Swift.
---
name: swift-testing
description: Write XCTest cases, async tests, and organized test suites in Swift. Use when writing XCTest cases, async tests, or organizing test suites in Swift.
metadata:
triggers:
files:
- '**/*Tests.swift'
keywords:
- XCTestCase
- XCTestExpectation
- XCTAssert
---
# Swift Testing Standards
## **Priority: P0 (CRITICAL)**
## Core Rule Anchors
Overview
See implementation examples for XCTest setup/teardown, async tests, and UI test patterns.
Manual install (npx, ZIP)
Claude Code
npx skills add HoangNguyen0403/agent-skills-standard --skill swift-testing -g -a claude-codeClaude Code (degit)
npx degit HoangNguyen0403/agent-skills-standard/skills/swift/swift-testing#develop ~/.claude/skills/swift-testingClaude.ai / desktop
Codex, Cursor, other agents
Connects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md3.1 KB
Read SKILL.md here
SKILL.md
Show the full text62 lines
Swift Testing Standards
Priority: P0 (CRITICAL)
Core Rule Anchors
[MOB-TEST-01]Tripartite Naming: Test functions must followtest_method_scenario_expectedBehaviorortestMethod_scenario_expectedBehavior.[MOB-TEST-02]State Invariant Rule: Assert state transitions and invariants; ban trivial state mirror tests.[MOB-TEST-03]Entity Invariant & Codable Rule: Test calculations, validations, domain invariants, and non-trivialCodableserialization/parsing or error mapping; ban testing trivial getters or echo tests.[MOB-TEST-04]Contract Testing Rule: Repositories and data sources must be tested for contract compliance and error mapping; ban 1:1 pass-through mock echoing.[MOB-TEST-05]Bug-First Regression Lock: Every PR fixing a bug ticket or with titlefix(...)must introduce a test reproducing the defect prior to the fix.
Write XCTest Cases
- Standard Naming: Test functions must prefixed by 'test' (
[MOB-TEST-01], e.g.,func test_userLogin_whenValid_isSuccessful()). - Setup/Teardown: Use
setUpWithError()andtearDownWithError()for environment management. - Assertions: Use specific assertions:
XCTAssertEqual,XCTAssertNil,XCTAssertTrue, etc.
See implementation examples for XCTest setup/teardown, async tests, and UI test patterns.
Test Async Code
- Async/Await: Mark test methods as
async throwsand usetry awaitdirectly inside them. - Expectations: Use
XCTestExpectationfor callback-based async logic. Callexpectationthenfulfill()when done; thenwait(for: [exp], timeout: 2.0)to block. - Timeout: Always set reasonable timeouts for expectations to avoid hanging CI.
Organize Test Suites
- Unit Tests: Use protocols for dependencies and inject them via constructor (e.g.,
init(service: ServiceProtocol)). Focus on logic isolation using mocks/stubs. - UI Tests: Test user flows using
XCUIApplicationand accessibility identifiers. - Coverage: Coverage is diagnostic and project-configured; verify risk-weighted critical paths rather than padding code for an arbitrary percentage.
Anti-Patterns
[MOB-TEST-01..05]Violations: Ban vague names, trivial state mirrors, echo tests, 1:1 mock echoing, and unverified bug fixes.- No Thread.sleep: Use expectations or await.
- No force unwrap in tests: Use
XCTUnwrap()for better failure messages. - No assertion-free tests: A test that only runs code without asserting contract invariants is not a test.
References
Canonical response anchors
When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:
- Inject them via constructor
- Use protocols
- prefixed by 'test'
| 1 | |
| 2 | name swift-testing |
| 3 | description Write XCTest cases, async tests, and organized test suites in Swift. Use when writing XCTest cases, async tests, or organizing test suites in Swift. |
| 4 | metadata |
| 5 | triggers |
| 6 | files |
| 7 | - '**/*Tests.swift' |
| 8 | keywords |
| 9 | - XCTestCase |
| 10 | - XCTestExpectation |
| 11 | - XCTAssert |
| 12 | |
| 13 | # Swift Testing Standards |
| 14 | |
| 15 | ## **Priority: P0 (CRITICAL)** |
| 16 | |
| 17 | ## Core Rule Anchors |
| 18 | |
| 19 | **`[MOB-TEST-01]` Tripartite Naming**: Test functions must follow `test_method_scenario_expectedBehavior` or `testMethod_scenario_expectedBehavior`. |
| 20 | **`[MOB-TEST-02]` State Invariant Rule**: Assert state transitions and invariants; ban trivial state mirror tests. |
| 21 | **`[MOB-TEST-03]` Entity Invariant & Codable Rule**: Test calculations, validations, domain invariants, and non-trivial `Codable` serialization/parsing or error mapping; ban testing trivial getters or echo tests. |
| 22 | **`[MOB-TEST-04]` Contract Testing Rule**: Repositories and data sources must be tested for contract compliance and error mapping; ban 1:1 pass-through mock echoing. |
| 23 | **`[MOB-TEST-05]` Bug-First Regression Lock**: Every PR fixing a bug ticket or with title `fix(...)` must introduce a test reproducing the defect prior to the fix. |
| 24 | |
| 25 | ## Write XCTest Cases |
| 26 | |
| 27 | **Standard Naming**: Test functions must prefixed by 'test' (`[MOB-TEST-01]`, e.g., `func test_userLogin_whenValid_isSuccessful()`). |
| 28 | **Setup/Teardown**: Use `setUpWithError()` and `tearDownWithError()` for environment management. |
| 29 | **Assertions**: Use specific assertions: `XCTAssertEqual`, `XCTAssertNil`, `XCTAssertTrue`, etc. |
| 30 | |
| 31 | See [implementation examples] for XCTest setup/teardown, async tests, and UI test patterns. |
| 32 | |
| 33 | ## Test Async Code |
| 34 | |
| 35 | **Async/Await**: Mark test methods as `async throws` and use `try await` directly inside them. |
| 36 | **Expectations**: Use `XCTestExpectation` for callback-based async logic. Call `expectation` then `fulfill()` when done; then `wait(for: [exp], timeout: 2.0)` to block. |
| 37 | **Timeout**: Always set reasonable timeouts for expectations to avoid hanging CI. |
| 38 | |
| 39 | ## Organize Test Suites |
| 40 | |
| 41 | **Unit Tests**: Use protocols for dependencies and inject them via constructor (e.g., `init(service: ServiceProtocol)`). Focus on logic isolation using mocks/stubs. |
| 42 | **UI Tests**: Test user flows using `XCUIApplication` and accessibility identifiers. |
| 43 | **Coverage**: Coverage is diagnostic and project-configured; verify risk-weighted critical paths rather than padding code for an arbitrary percentage. |
| 44 | |
| 45 | ## Anti-Patterns |
| 46 | |
| 47 | **`[MOB-TEST-01..05]` Violations**: Ban vague names, trivial state mirrors, echo tests, 1:1 mock echoing, and unverified bug fixes. |
| 48 | **No Thread.sleep**: Use expectations or await. |
| 49 | **No force unwrap in tests**: Use `XCTUnwrap()` for better failure messages. |
| 50 | **No assertion-free tests**: A test that only runs code without asserting contract invariants is not a test. |
| 51 | |
| 52 | ## References |
| 53 | |
| 54 | [XCTest Patterns & Async Tests] |
| 55 | |
| 56 | ## Canonical response anchors |
| 57 | |
| 58 | When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant: |
| 59 | Inject them via constructor |
| 60 | Use protocols |
| 61 | prefixed by 'test' |
| 62 |
Details
- License
- MIT
- Stars on the repo
- ★ 569
- Checked
- Source
- HoangNguyen0403/agent-skills-standard ↗
- Creator
- HoangNguyen0403 · 21 listings
Similar skills
See all →
SkillExpo Task Router
SkilliOS App Clip Setup
SkillApp Store Deploy Agent
SkillSleek Mobile App Designer
SkillReact Native Animation Builder
SkillModern Swift Writing GuideMore from HoangNguyen0403
SkillAndroid Test Writer
SkillArchitecture Diagram Designer
SkillCode Review Expert
SkillCybersecurity Framework Mapper
SkillDecision Discipline Framework
SkillFlutter Robot Pattern Tests