ios-testing-best-practices
1
总安装量
1
周安装量
#53181
全站排名
安装命令
npx skills add https://github.com/pproenca/dot-skills --skill ios-testing-best-practices
Agent 安装分布
amp
1
opencode
1
kimi-cli
1
codex
1
github-copilot
1
claude-code
1
Skill 文档
iOS Testing Best Practices
Comprehensive testing guide for iOS and Swift applications, written at principal engineer level. Contains 44 rules across 8 categories, prioritized by impact to guide test architecture decisions, test authoring patterns, and CI infrastructure.
When to Apply
Reference these guidelines when:
- Writing new unit tests or UI tests for iOS apps
- Designing testable architecture with dependency injection
- Testing async/await, actors, and Combine publishers
- Setting up snapshot testing or visual regression suites
- Configuring CI pipelines, test plans, and parallel execution
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Test Architecture & Testability | CRITICAL | arch- |
| 2 | Unit Testing Fundamentals | CRITICAL | unit- |
| 3 | Test Doubles & Isolation | HIGH | mock- |
| 4 | Async & Concurrency Testing | HIGH | async- |
| 5 | SwiftUI Testing | MEDIUM-HIGH | swiftui- |
| 6 | UI & Acceptance Testing | MEDIUM | ui- |
| 7 | Snapshot & Visual Testing | MEDIUM | snap- |
| 8 | Test Reliability & CI | LOW-MEDIUM | ci- |
Quick Reference
1. Test Architecture & Testability (CRITICAL)
arch-protocol-dependencies– Depend on protocols, not concrete typesarch-constructor-injection– Use constructor injection over service locatorsarch-test-target-separation– Separate unit and UI test targetsarch-testable-import– Use @testable import sparinglyarch-single-responsibility-tests– One assertion concept per testarch-arrange-act-assert– Structure tests as Arrange-Act-Assert
2. Unit Testing Fundamentals (CRITICAL)
unit-swift-testing-framework– Use Swift Testing over XCTest for new testsunit-parameterized-tests– Use parameterized tests for input variationsunit-descriptive-test-names– Name tests after the behavior they verifyunit-expect-over-assert– Use #expect and #require over XCTAssertunit-require-preconditions– Use #require for test preconditionsunit-test-suites– Organize related tests into suitesunit-test-tags– Use tags to categorize cross-cutting tests
3. Test Doubles & Isolation (HIGH)
mock-protocol-based-mocks– Create mocks from protocols, not subclassesmock-spy-for-verification– Use spies to verify interactionsmock-stub-return-values– Use stubs for deterministic return valuesmock-avoid-over-mocking– Avoid mocking value types and simple logicmock-fake-for-integration– Use in-memory fakes for integration testsmock-dependency-container– Use a dependency container for test configuration
4. Async & Concurrency Testing (HIGH)
async-await-directly– Await async functions directly in testsasync-confirmation– Use confirmation() for callback-based APIsasync-mainactor-isolation– Test MainActor-isolated code on MainActorasync-actor-testing– Test actor state through async interfaceasync-task-cancellation– Test task cancellation paths explicitly
5. SwiftUI Testing (MEDIUM-HIGH)
swiftui-test-observable-models– Test @Observable models as plain objectsswiftui-environment-injection– Inject environment dependencies for testsswiftui-preview-as-test– Use previews as visual smoke testsswiftui-view-model-extraction– Extract logic from views into testable modelsswiftui-binding-testing– Test binding behavior with @Bindable
6. UI & Acceptance Testing (MEDIUM)
ui-accessibility-identifiers– Use accessibility identifiers for element queriesui-page-object-pattern– Encapsulate screens in page objectsui-launch-arguments– Configure test state via launch argumentsui-wait-for-elements– Wait for elements instead of using sleep()ui-test-user-journeys– Test complete user journeys, not individual screensui-reset-state-between-tests– Reset app state between UI tests
7. Snapshot & Visual Testing (MEDIUM)
snap-swift-snapshot-testing– Use swift-snapshot-testing for visual regressionsnap-device-matrix– Snapshot across device sizes and traitssnap-named-references– Use named snapshot references for claritysnap-inline-snapshots– Use inline snapshots for non-image assertions
8. Test Reliability & CI (LOW-MEDIUM)
ci-test-plans– Use Xcode Test Plans for environment configurationsci-parallel-execution– Enable parallel test executionci-flaky-test-quarantine– Quarantine flaky tests instead of disabling themci-deterministic-test-data– Use deterministic test data over random generationci-coverage-thresholds– Set coverage thresholds for critical paths
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions – Category structure and impact levels
- Rule template – Template for adding new rules
Reference Files
| File | Description |
|---|---|
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |