Agent-skills-standard swift-testing

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)

install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/swift/swift-testing" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-swift-testing && rm -rf "$T"
manifest: skills/swift/swift-testing/SKILL.md
source content

Swift Testing Standards

Priority: P0

Write XCTest Cases

  • Standard Naming: Test functions must 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: test that only runs code not test.

References