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:

  1. Apa yang sedang ditest? → Pastikan satu @Test hanya test satu behavior
  2. Apakah test ini deterministic? → Hindari sleep, gunakan TestClock
  3. Apakah test ini isolated? → Hindari shared mutable state antar test
  4. Apakah pesan error cukup informatif? → Gunakan CustomTestStringConvertible dan 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.