Summary: - Tests: TestPlan.xctestplan - Docs: Testing Stats: - 2 files changed, 41 insertions(+)
2.1 KiB
2.1 KiB
LocalData Testing Strategy
Goal
To ensure high reliability for data persistence, security, and migration across all supported platforms (iOS and watchOS).
Test Suites
Unit Tests (Tests/LocalDataTests/)
- LocalDataTests.swift: Core round-trip tests for each storage domain (UserDefaults, FileSystem).
- KeychainHelperTests.swift: Verification of Keychain API interactions (add, update, delete, exists).
- EncryptionHelperTests.swift: Round-trip tests for AES and ChaCha20 encryption/decryption with various key derivation methods.
- StorageCatalogTests.swift: Validation of catalog registration, duplicate detection, and missing description checks.
Key Testing Patterns
1. Domain Round-Trips
Always test the full cycle: set -> get (compare) -> remove -> get (expect notFound).
2. Migration Tests
Simulate legacy data by writing to a "legacy" key first, then verifying that the "modern" key can retrieve and consolidate that data.
3. Error Handling
Verify that the correct StorageError is thrown for:
notFoundunregisteredKeydataTooLargeForSync- Domain-specific failures (e.g., Keychain errors)
Running Tests
Run all tests from the package root:
swift test
Xcode Test Plans
For granular control (enabling/disabling specific tests or trying different configurations), use Xcode Test Plans:
- Create a Test Plan:
- Go to Product > Test Plan > New Test Plan...
- Save it in your
Tests/directory asLocalData.xctestplan.
- Configure Tests:
- Open the
.xctestplanfile. - You will see a list of all test targets, classes, and individual test methods.
- Use the check/uncheck boxes to include or exclude specific tests.
- Open the
- Run the Plan:
- Hold down the Play button for the test action or go to Product > Test > [Plan Name].
- You can also run it via terminal:
xcodebuild test -plan LocalData.
Tip
Test plans are excellent for CI/CD environments where you might want to run a "Smoke Test" plan (subset of tests) or a "Full Integration" plan.