Geleceğin Unit Test’i, Generative Testing.
Neal Ford, Rebecca Parsons, Patrick Kua tarafından yazılan Building Evolutionary Architectures kitabının sonlarına doğru olan bir bölümden bahsedeyim istiyorum bu yazıda; Generative Testing. Future State başlığı altında Patrick Kua tarafından ele alınan bu bölümü gördüğüm zaman çok heyecanlanmış ve hemen uygulamak istemiştim fakat çok kısa bir bölümdü ve açıkçası var olan Java kodlarımıza uygulayıp uygulayamayacağımızdan emin değildim.
Bir kodu sürdürülebilir yapmak için testler olmazsa olmazdır. Generative Testing dediğimiz, test caseleri üreten kodları yazma mantığı aslında. Tek tek test yazmak yerine, sadece hangi parametrelerin olabileceğini söylüyoruz, o da bize random milyonlarca test case oluşturuyor. Generative testing’in milyonlarca case vaadi gerçekten büyük bir şans. Diğer yanda hali hazırda kullandığımız unit testler ise elbette iyiler ve yüksek oranda code coverage sağlıyorlar fakat unit testler ile yazabileceğimiz case sayısı sınırlıdır.
Bu pratiğe POC yapmadan önce biraz araştırma yaptım. Genelde JavaScript veya Clojure gibi dillerde daha yaygın kullanıldığına rastlasam da Java için LiveRamp adında bir kütüphane bulabildim.
LiveRamp/generative kütüphanesi ile kaç tane test case oluşturmak istiyorsanız o sayıyı runTests dedikten sonra parantezin içindeki ilk değerle belirleyebiliyorsunuz. “g” dediğimiz de generative class’ın randomlığı sağlayan objesi.
Kütüphaneyi direkt dependency olarak eklediğinizde kullanmaya başlayabiliyorsunuz. Dependency’nin scope’unu test yaparsanız da production kodunuzu etkilemesini engelleyebilirsiniz.
Bir tane de örnek verip yazıyı bitirelim, DeliveryHour parametresi için unit test örneği şu şekilde oluyorken;
Generative test örneği şu şekilde oluyor;
Unit test vs Generative testing karşılaştırması yapınca da geleneksel unit testlerin, generative testing yanında yok sayılacak kadar önemsiz olduğunu görüyoruz. Bu kadar fazla test çalıştırmak performansı kötü etkilemeyecek mi derseniz, elbette pipeline sürelerini uzatacaktır fakat biz 15bin kat fazla test çalıştırdığımızda sürenin yalnızca 3 katına çıktığını gördük. Umarım faydalı bir yazı olmuştur. Yorumlarınızı bekliyorum. Bu arada yazıyı beğendiyseniz alkış ile beni haberdar edebilirsiniz. 🤘🏻