Agent Skills: 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. (triggers: **/*Tests.swift, XCTestCase, XCTestExpectation, XCTAssert)

UncategorizedID: hoangnguyen0403/agent-skills-standard/swift-testing

Install this agent skill to your local

pnpm dlx add-skill https://github.com/HoangNguyen0403/agent-skills-standard/tree/HEAD/skills/swift/swift-testing

Skill Files

Browse the full folder contents for swift-testing.

Download Skill

Loading file tree…

skills/swift/swift-testing/SKILL.md

Skill Metadata

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. (triggers: **/*Tests.swift, XCTestCase, XCTestExpectation, XCTAssert)"

Swift Testing Standards

Priority: P0

Write XCTest Cases

  • Standard Naming: Test functions must be prefixed by 'test' (e.g., func testUserLoginSuccessful()).
  • Setup/Teardown: Use setUpWithError() and tearDownWithError() 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 throws and use try await directly inside them.
  • Expectations: Use XCTestExpectation for callback-based async logic. Call expectation then fulfill() when done; then wait(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 XCUIApplication and accessibility identifiers.
  • Coverage: Aim for high coverage on critical business logic and state transitions.

Anti-Patterns

  • 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 is not a test.

References