ios-testing-best-practices
SKILL.md
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 |
Weekly Installs
1
Repository
pproenca/dot-skillsGitHub Stars
71
First Seen
Feb 11, 2026
Security Audits
Installed on
amp1
opencode1
kimi-cli1
codex1
github-copilot1
claude-code1