Test
Unit and Integration Test
Last updated
Unit and Integration Test
Last updated
Herhangi bir IO çağrısı yapmadan yazılan testlerdir. O tarz erişimlerinizi bağımlılıklarınızı sahteleriyle (Fake Stub, Mock) değiştirmeniz gerekiyor. Fake, stub ile Mock içine alan tabirdir.
Unit test yazabilmek için kodumuzu yazarken SOLID prensiplerinden Dependency Injection göre kodumuzu yazmamız gerekir.
Stub, enjecte ettiğiniz class ın metodlarını kullanıp kullanmadığını merak etmediğiniz halidir. Mock, ise merak ediyorsanız ki halidir. Örneğin futbol sahasının fiskiye sistemiyle sulanmasını düşünelim. Testimiz sahanın sulanıp sulanmadığını gözlemlemek. İki yöntemle yapabiliriz. Bir cihaz ile sahanın çimlerinin ıslak olup olmadığı kontrol edilebilir. İkinci yöntem ise muslukların başına sensör eklenerek çalıştıklarının tespitiyle sahanın da sulanmış olacağını farz edebiliriz. Birinci yöntemde musluklarla ilgilenmediğimizden onlar stub oluyor, ikinci yöntem de musluklar bizim mock mız olur. İkinci yöntemle musluk çalıştımı çalışmadı mı kaç defa çalıştı gibi ek bilgiler elde edebiliyoruz. Stub testinizi fail ettirmez ama mock ettirir. Çünkü çağrılıp çağrılmadığına bakıyorsunuz.
Kodunuzdaki CRUD işlemleri sonrasında verilerin veritabanına yazılıp yazılmadığını save metodunun çağrılıp çağrılmadığına bakarak anlarsınız. bu mock olur. Ama gidip veri tabanından kontrol etmeye kalkarsak stub olur. Unit test için de doğru bir yöntemde değildir.
Unit testleriniz içerisinde lojik olmamalıdır. İf else gibi dallanmalar oluşturan koşullar olmasın. Triple A kavramına uygun yazılmalıdır.
Arrange (gerekli objeleri oluştur)
Act (test etmek istediğin metodu çağır)
Assert (beklenen veri mi metoddan döndü kontrol et)
Unit test geliştirmiş olduğunuz kodu test etmek için yazdığınız kod bloğudur ve esas olarak kodun veya fonksiyonun belirli bir biriminin davranışını kontrol eder ve geliştirdiğiniz kod dizinindeki akışa dayalı olarak acceptance criteria'ları cover ediyor mu etmiyor mu ölçebilmek adına da büyük öneme sahiptir.
Bazı Unit Test Frameworkleri
JAVA da JUnit tartışmasız kullanılırken, C++ tarafında oturaklı unit test framework olarak neler olduğunu internette araştırmak gerekir. Boost kütüphanesi güçlü bir kütüphane ve kendi içerisinde unit test çözümü de barındırmaktadır.
Unit test veya integration test projenizde bulunan business logic'lerin belirtilen input'lar çerçevesinde ne şekilde çalışması gerektiğini garanti ettiğimiz yapılar olup projelerimiz için oldukça önemli bir Must layer olmaktadır.
Integration test; projenizde yer alan birden fazla modülün belirtilen input'lar ile beklendiği şekilde çalışmasını test eden yapıdır. Diğer bir deyişle, bir biri ile bağlı şekilde çalışan modüler yapıları ve onların sahip oldukları business logic'leri toplu bir şekilde ele alıp doğruluğunu veya yanlışlığını test etmemizi sağlayan yapıdır.
Integration Test bize bir şeyin çalışıp çalışmadığını söylerken, Unit Test neden çalışmadığını söyler. Unit Test yazılımcı perspektifinden bakarken, Integration Test kullanıcı perspektifinden yazılır.
Integration test, unit test’e göre çok daha maliyetlidir.