Dart
Property test
Property-based testing öğrenirsin.
Property test
Property-based testing, rastgele girdilerle değişmezleri (invariant) kontrol eder. Sabit bir girdi yerine, 100+ rastgele değer üretilip özellik sınanır.
Örnek: toplama işlemi için değişmez a + b == b + a (değişmeli). Her rastgele a ve b için bu doğrulanır. Bir karşı örnek bulunursa test başarısız olur.
Başarısızlıkta araç, en küçük karşı örneği bulmaya çalışır (shrinking). Örn. [3, -1, 2] yerine [0, -1]'e küçültür. Bu, hatanın kaynağını bulmayı kolaylaştırır.
Değişmez örneği
Yaygın bir değişmez: sort(sort(list)) == sort(list) (idempotent). Yani bir liste bir kez sıralandıktan sonra tekrar sıralamak değiştirmez.
Başka örnek: reverse(reverse(list)) == list (tersine çevirme ters çevirme). Her rastgele liste için bu doğrulanır.
Property test, bu değişmezleri 100+ rastgele girdiyle sınar. Bir tanesi bile başarısız olursa test düşer ve karşı örnek raporlanır.
Uygulama Sıralama değişmezini sına
Bir List<int> sortList(List<int> input) fonksiyonu tanımla: final out = List<int>.from(input)..sort(); return out;. Bir bool isSorted(List<int> list) fonksiyonu tanımla: for (var i = 1; i < list.length; i++) { if (list[i - 1] > list[i]) return false; } return true;. main içinde final lists = [[3, 1, 2], [5, 4, 6], [9, 7, 8]]; tanımla; var pass = true;; her liste için if (!isSorted(sortList(list))) pass = false; çağır; sonunda print(pass ? 'PASS: idempotent' : 'FAIL'); ekle.
Örnek çözümü göster
List<int> sortList(List<int> input) {
final out = List<int>.from(input)..sort();
return out;
}
bool isSorted(List<int> list) {
for (var i = 1; i < list.length; i++) {
if (list[i - 1] > list[i]) return false;
}
return true;
}
void main() {
final lists = [
[3, 1, 2],
[5, 4, 6],
[9, 7, 8],
];
var pass = true;
for (final list in lists) {
if (!isSorted(sortList(list))) pass = false;
}
print(pass ? 'PASS: idempotent' : 'FAIL');
}
Kendini test et
-
Deneme sayısı
for (var i = 0; i < ____; i++) { check(random()); }
Cevabı göster
for (var i = 0; i < 100; i++) { check(random()); }
-
Property test neyi kontrol eder?
- Tek bir sabit değeri
- Yalnızca null durumu
- Rastgele girdilerde değişmezleri
- Yalnızca boş listeyi
Cevabı göster
Rastgele girdilerde değişmezleri — property test rastgele girdilerle değişmezleri sınar.
-
Property test parçalarını eşleştir
- property
- Değişmez
- generator
- Rastgele üretici
- forAll
- Tümü için
- shrink
- Başarısız küçültme
Sıradaki ders: Mock advanced