Section 16/162 menit
16. Ringkasan & Decision Guide
16. Ringkasan & Decision Guide
| Skenario | Rekomendasi |
|---|---|
| Testing completion handler / callback | Confirmation API |
| Bug diketahui tapi belum fix | withKnownIssue("JIRA-XXX: ...") |
Test yang bisa crash/fatalError |
#expect(exitsWith: .failure) |
| Banyak input berbeda, satu fungsi | Parameterized @Test(arguments:) |
| Test share mutable state | @Suite(.serialized) |
| Test yang berinteraksi dengan actor | Fungsi async + await actor.property |
| Verify interaksi (berapa kali dipanggil) | Mock dengan actor untuk thread safety |
| Butuh implementasi nyata yang sederhana | Fake — bukan stub atau mock |
| Performance benchmark dengan baseline | Tetap gunakan XCTest measure {} |
| UI testing (button tap, navigation) | Tetap gunakan XCUITest / XCTestCase |
| CI parsing hasil test | JUnit XML via xcpretty atau xcresult |
| Test slow yang tidak cocok di fast CI | Custom TestTrait dengan environment check |
Filosofi Test Suite yang Baik
swift
Piramida Test:
/\
/ \
/ UI \ ← Sedikit, lambat, fragile
/______\
/ \
/Integration\ ← Sedang, test batas sistem
/____________\
/ \
/ Unit Tests \ ← Banyak, cepat, fokus
/________________\
Swift Testing paling kuat di lapisan unit dan integration. Untuk setiap test baru, tanyakan:
- Apa yang sedang ditest? → Pastikan satu
@Testhanya test satu behavior - Apakah test ini deterministic? → Hindari sleep, gunakan TestClock
- Apakah test ini isolated? → Hindari shared mutable state antar test
- Apakah pesan error cukup informatif? → Gunakan
CustomTestStringConvertibledan pesan yang jelas di#expect
Langkah selanjutnya: swift6-swift-testing.md untuk dasar-dasar, dan swift-debugging-lldb.md untuk debugging ketika test gagal dan tidak jelas penyebabnya.