Section 6/121 menit

6. Tags dan Traits

6. Tags dan Traits

Mendefinisikan Tags

swift
// Tags untuk kategorisasi
extension Tag {
    @Tag static var critical: Self
    @Tag static var network: Self
    @Tag static var ui: Self
    @Tag static var slow: Self
    @Tag static var regression: Self
}

// Gunakan di test
@Test("Payment processing", .tags(.critical, .network))
func processPayment() async throws {
    // ...
}

@Test("User list rendering", .tags(.ui))
func userListRenders() {
    // ...
}

Traits Lainnya

swift
// .disabled: skip test dengan alasan
@Test("Feature flag integration", .disabled("Menunggu feature flag service"))
func featureFlagTest() { }

// .bug: link ke bug tracker
@Test("Handle null response", .bug("https://github.com/org/repo/issues/42"))
func nullResponseHandling() async throws {
    // Test untuk bug yang sudah difix
}

// .timeLimit: batas waktu eksekusi
@Test("Cache warming", .timeLimit(.minutes(2)))
func cacheWarmingCompletes() async throws {
    try await cacheService.warmUp()
}

// .serialized: jalankan secara serial (tidak paralel)
@Suite("Integration Tests", .serialized)
struct IntegrationTests {
    // Test di suite ini tidak dijalankan paralel satu sama lain
    // (tapi masih paralel dengan suite lain)
}

Menjalankan Test Berdasarkan Tag

swift
# Di command line:
swift test --filter ".tags(.critical)"
swift test --filter ".tags(.network)"
swift test --skip ".tags(.slow)"

# Di Xcode: gunakan Test Plan untuk filter berdasarkan tag