CodeBlanks Logo Icon CodeBlanks

Property test

kotest-property ile property-based testing öğrenirsin.

kotest-property ile property test

kotest-property, bir özelliğin rastgele üretilen girdiler için geçerli olduğunu test eder. forAll ile bir koşul yazarsın; kütüphane yüzlerce rastgele değerle deneyip bozacak birini arar.

Örnek: forAll<Int> { n -> (n * 2) % 2 == 0 }. Bu, her tam sayının iki katının çift olduğunu kontrol eder. Bir counterexample bulunursa test başarısız olur ve örnek gösterilir. Bu kalıp, klasik birim testin kaçtırdığı üç durumları yakalar.

forAll ve Arb

forAll, bir özellik fonksiyonu alır. Tip parametresi rastgele girdi üretimini belirler; Arb ile özel üreteçler tanımlanır.

Örnek: forAll<Int> { n -> n + 0 == n }. Burada Int tipi için rastgele değer üretilir. Arb.string(), Arb.positiveInt() gibi hazır üreteçler vardır. Bir özellik bozulursa kütüphane en küçük bozan örneği gösterir; bu, hatanın nedenini anlamayı kolaylaştırır.

Uygulama reverse özelliğini test et

main içinde forAll<String> { s -> s.reversed().reversed() == s } çağrısı yap ve println("ok") yazdır. forAll io.kotest.property.forAll içe aktarımını kullan.

Başlangıç kodu

Main.kt
import io.kotest.property.forAll

// main'de forAll<String> ile çift reverse özelliğini test et
// başarıyla biterse başarı yazısı yazdır

Örnek çözüm

Main.kt
import io.kotest.property.forAll

fun main() {
    forAll<String> { s ->
        s.reversed().reversed() == s
    }
    println("ok")
}

Beklenen çıktı

ok

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 kotest-property neyi sağlar?

  • Tek bir sabit girdiyle test
  • Rastgele girdilerle bir özelliğin doğrulanması Doğru cevap
  • Sadece UI testi
  • Yalnızca derleme zamanı kontrolü

Açıklama: kotest-property rastgele girdilerle özellik doğrular.

2 forAll bloğunu tamamla

Soru
____<Int> { n ->
    (n * 2) % 2 == 0
}
Cevap
forAll<Int> { n ->
    (n * 2) % 2 == 0
}

Açıklama: forAll, rastgele girdilerle özelliği test eder.

3 Property test parçalarını eşle

Kavram Anlamı
forAll<T> { } Özellik bloğu
Arb.string() Dize üreteci
Int Tip parametresi
counterexample Bozan örnek

İleri seviye bölümündeki tüm dersler