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)
}
}