8 puan yazan ohjongin 2022-06-22 | 9 yorum | WhatsApp'ta paylaş

Böyle basit bir Kotlin kodunda bile tüm dalları test etmek, neredeyse imkansız olacak kadar zordur. Bunun nedeni, Kotlin’in bu kodu bytecode’a derlerken kodu yazanın amaçlamadığı dallar üretmesidir.

when(answer) {
"yes" -> true
else -> false
}

Kotlin, kod yazan geliştiricilere pek çok kullanışlı özellik sunarken, bytecode’a derlendiğinde bu örnekte olduğu gibi kullanıcıya görünmeyen çok sayıda branch de üretir. JVM platformunda en yaygın kullanılan test coverage aracı olan JaCoCo, branch coverage’ı hesaplarken bytecode’u temel aldığı için, Kotlin kullanan geliştiricilerden fark etmeden oluşan branch’leri de kapsamasını isteyebilir. Bu nedenle Kotlin geliştiricileri test coverage’ı %100’e çıkarmaya çalıştığında, yukarıdaki gibi durumlarda decompile yapmak zorunda kalabilir; daha da şanssızlarsa decompile başarısız olur ve hangi branch’lerin bulunduğunu anlamak için doğrudan bytecode’a bakmaları gerekebilir.

9 yorum

 
youknowone 2022-06-23

Coverage takibini %100’e çıkarmak için kodu eğip bükmek, bana göre amacı araçla karıştırmak gibi hissettiriyor.

 
innoceive 2022-06-23

Kod bozulmuş değil. Sadece insan açısından daha rahat başka yollar var.

 
regentag 2022-06-23

Savunma (silah sistemleri) alanında, DAPA’nın yönergeleri kod kapsamının %100 olmasını şart koşuyor.
Gerçekte %100’e ulaşmak zor olsa da, bunun yerine kapsanamayan her yer için neden kapsanamadığına dair tek tek açıklama eklenmesi gerektiğini biliyorum.

 
doldari 2022-06-22

Deliliğin testlerde %100’ü…

 
roxie 2022-06-23

hahaha

 
ganadist 2022-06-22

enum / sealed / boolean için dallanma durumlarında doğru şekilde ele alınmazsa, derleyici Kotlin 1.6'da uyarı verecek, 1.7'den itibaren ise hata verecek şekilde değiştirildi.

https://youtrack.jetbrains.com/issue/KT-47709

 
525hm 2022-06-22

slash 21'de içeriği keyifle okudum haha

 
ohjongin 2022-06-22

Ah~ demek ki slash 21'de çıkan içerikmiş... Ben ilk kez bir tanıdığımın Twitter'ında görmüştüm... Geç kaldığım için kusura bakmayın...