CodeBlanks Logo Icon CodeBlanks

Golden test

Golden test ve snapshot öğrenirsin.

Golden test

Golden test, çıktıyı kaydedilmiş bir 'altın' (golden) dosyayla karşılaştırır. Çıktı değişirse test başarısız olur. matchesGoldenFile('goldens/foo.png') ile kullanılır.

İlk çalıştırmada altın dosya yoktur; --update-goldens bayrağıyla oluşturulur. Sonraki çalıştırmalarda çıktı bu dosyayla karşılaştırılır.

Avantaj: karmaşık çıktıları (görüntü, JSON, metin) tek seferde doğrular. Dezavantaj: bilinçli değişiklikte altın dosyayı yenilemek gerekir.

Altın dosyayı yenileme

Bilinçli bir değişiklikte (yeni tasarım, yeni alan) çıktı değişir. Bu durumda dart test --update-goldens çalıştırılarak altın dosya yenilenir.

Yenilemeden önce diff (fark) dikkatle incelenmelidir. Yanlışlıkla değişen bir çıktı, fark görülmeden onaylanabilir.

Altın dosyalar versiyon kontrolüne (git) işlenir. Böylece takım, aynı altın dosyaları paylaşır ve değişiklikler gözden geçirilir.

Uygulama GoldenComparator tanımla

Bir GoldenComparator sınıfı tanımla: final String golden; GoldenComparator(this.golden); String compare(String actual) { return actual == golden ? 'PASS: matches golden' : 'FAIL: golden mismatch'; }. main içinde final comparator = GoldenComparator('Hello, Ayşe!'); yarat ve print(comparator.compare('Hello, Ayşe!')); ekle.

Başlangıç kodu

main.dart
void main() {
  // GoldenComparator sınıfını tanımla (golden alanı; compare metodu)
  // bir comparator yarat; aynı değeri compare et; yazdır
}

Örnek çözüm

main.dart
class GoldenComparator {
  final String golden;
  GoldenComparator(this.golden);
  String compare(String actual) {
    return actual == golden ? 'PASS: matches golden' : 'FAIL: golden mismatch';
  }
}

void main() {
  final comparator = GoldenComparator('Hello, Ayşe!');
  print(comparator.compare('Hello, Ayşe!'));
}

Beklenen çıktı

PASS: matches golden

Soru ve cevaplar

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

1 matchesGoldenFile çağrısı

Soru
expect(widget, ____('goldens/widget.json'));
Cevap
expect(widget, matchesGoldenFile('goldens/widget.json'));

Açıklama: matchesGoldenFile çıktıyı altın dosyayla karşılaştırır.

2 Golden test parçalarını eşleştir

Kavram Anlamı
matchesGoldenFile Karşılaştırma
golden Referans dosya
--update-goldens Yenileme
snapshot Anlık görüntü

3 Golden test ne zaman başarısız olur?

  • Test yavaşsa
  • Çıktı altın dosyadan farklıysa Doğru cevap
  • Kod derlenmezse
  • Import eksikse

Açıklama: çıktı altın dosyadan farklıysa test başarısız olur.

Uzman bölümündeki tüm dersler