Section 6/161 menit

6. `withKnownIssue` dan Pendataan Bug

6. withKnownIssue dan Pendataan Bug

withKnownIssue memungkinkan test yang diketahui gagal tetap berjalan dan terdokumentasi — bukan di-skip atau di-comment.

Penggunaan Dasar

swift
@Test
func testFeatureWithKnownBug() {
    // Kode yang diketahui buggy tapi belum diperbaiki
    withKnownIssue("Bug JIRA-1234: roundingMode tidak diterapkan dengan benar") {
        let result = PriceCalculator.calculate(amount: 10.005, currency: "IDR")
        #expect(result == 10010)  // Gagal karena bug — tapi dicatat bukan fail
    }
    // Saat bug diperbaiki: "known issue unexpectedly passed" → hapus withKnownIssue
}

Conditional Known Issue

swift
// Known issue hanya pada kondisi tertentu
@Test
func testFileOperationOnLimitedStorage() async throws {
    withKnownIssue(
        "Bug #567: file operation gagal di storage < 1GB",
        isIntermittent: true  // Tidak selalu terjadi
    ) {
        // Bug ini hanya terjadi di device dengan storage sangat rendah
        let result = try FileManager.default.createTemporaryFile(size: 100_000_000)
        #expect(result != nil)
    }
}

Tracking Multiple Known Issues

swift
@Suite("Fitur Beta yang Masih Buggy")
struct BetaFeatureTests {

    @Test("Test dengan bug parsing")
    func testJSONParsing() {
        withKnownIssue("Bug #100: nested array parsing") {
            let json = """{"items": [[1,2],[3,4]]}"""
            let result = try? JSONParser.parse(json)
            #expect(result?.items.count == 2)
        }
    }

    @Test("Test dengan bug network")
    func testNetworkTimeout() async {
        withKnownIssue("Bug #101: timeout tidak direspek saat proxy aktif") {
            let result = await NetworkClient.fetch(timeout: .seconds(1))
            #expect(result != nil)
        }
    }

    // Test normal — tanpa known issue
    @Test("Test yang sudah berjalan dengan benar")
    func testBasicOperation() {
        #expect(Calculator.add(2, 3) == 5)
    }
}