Ana Sayfa

Test Yazmayı Keyifli Hale Getiren Expect Testleri

1 dk okuma

Jane Street'te geliştirilen "expect testleri" adı verilen bir yöntem, test yazma sürecini adeta bir REPL oturumu veya Jupyter notebook'ta keşifsel programlama deneyimine dönüştürüyor. Geleneksel test framework'lerinde basit bir assert ifadesi bile fibonacci(15) gibi bir fonksiyonun çıktısını manuel olarak hesaplamayı veya yanlış bir değer girip hata mesajından doğru çıktıyı kopyalayıp yapıştırmayı gerektirirken, expect testleri bu zahmeti ortadan kaldırıyor. Bu yöntem, Rust'taki expect-test veya JavaScript'teki Jest gibi "snapshot" testlerine benzer bir prensiple çalışıyor ancak daha entegre bir deneyim sunuyor.

Expect testleri ile bir fonksiyonun çıktısını test etmek için sadece kodun altına boş bir [%expect {||}] bloğu eklemek yeterli. Sistem, kodu çalıştırıp çıktıyı otomatik olarak bu bloğa dolduruyor. Eğer beklenen çıktı değişirse, geliştiriciye sadece bir hata mesajı yerine, dosyasında yapması gereken değişikliği gösteren detaylı bir diff sunuluyor. Emacs gibi entegre geliştirme ortamlarında, tek bir tuş kombinasyonuyla bu diff kabul edilerek dosya otomatik olarak güncellenebiliyor. Bu iş akışı, test yazmayı son derece hızlı, interaktif ve keyifli hale getiriyor.

Bu güçlü iş akışı sayesinde, karmaşık fonksiyonlar üzerinde çalışırken hızlıca örnekler oluşturup çıktıları anında görmek mümkün oluyor. Örneğin, özel kısıtlamalarla sayıları yuvarlayan bir fonksiyonu test ederken, sadece birkaç satır kodla bir tablo oluşturup farklı girdilerin çıktılarını gözlemleyebilir, hataları anında fark edip düzeltmeleri yaparak fonksiyonu mükemmelleştirebilirsiniz. Oluşturulan bu test çıktıları aynı zamanda fonksiyonun nasıl çalıştığına dair canlı bir dokümantasyon görevi de görüyor. Bu yaklaşım, geliştiricilerin test yazmaktan kaçınmak yerine, onu geliştirme sürecinin doğal ve verimli bir parçası olarak görmesini sağlıyor.

İçgörü

Expect testleri, geleneksel test yazma süreçlerinin zorluklarını aşarak geliştiricilere daha hızlı geri bildirim, interaktif bir deneyim ve canlı dokümantasyon sunarak yazılım kalitesini artırıyor.

Kaynak