Property test
- Kotlin kursu
- İleri seviye
- Ders 47/83
- 5 dk
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
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
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
____<Int> { n ->
(n * 2) % 2 == 0
}
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 |