Unit Test Nedir, Nasıl Yazılır?

Uğurcan Çağlayan
folksdev
Published in
2 min readAug 27, 2022

Merhabalar. Bu yazımda Unit Test’in mantığını ve nasıl yazılacağını bildiğim kadarıyla sizlere anlatmaya çalışacağım.

Unit Test; bir metodun, çalışabilirliğini ve yazılan kodun nasıl bir sonuç döndüreceği izlenimini bize gösteren yöntemdir. Unit Test gerçek zamanlı bir test olmayacağı için test yapılacak ürünün içerisindeki kısımların örneği/sahtesi oluşturularak hangi aşamalardan geçtiği kontrol edilir.

Test için JUnit 5 kütüphanesini kullanacağız.

Unit Test yazmaya başlayacak olursak:

@ExtendWith(MockitoExtension.class)

Test’in başlayacağı yerdir ve oluşturulan test sınıfının başına yazılır. Mock’ları başlatan kısımdır. JUnit 5 ile gelen bir özelliktir.

@InjectMocks ve @Mock

Test yazacağımız sınıfın içerisinde kullanılan özellikler @Mock ile belirtilerek örneği oluşturulur ve @InjectMocks ile bunlar sınıfa enjekte edilir. Bu şekilde metot içerisinde ne yapmak istiyorsak kolayca taklit edebileceğiz.

Örnek olarak shortUrl adında bir metodum var. Metodum parametre olarak DTO istiyor ve bu DTO’yu metodumun içerisinde modele dönüştürüyorum. Bu metodumun amacı dönüştürdüğüm modeli database’ye kayıt etmek. Ancak eğer URL alanı NULL değer olursa oluşturduğumuz exception’ı fırlatacak. Biz bu senaryoyu test edeceğiz.

Service Metodu
Test Sınıfı

Yukarıda anlattığım kısımları testimize uyarlamamız lazım. Yukarıda servis içerisindeki metodun, modeli database’ye kayıt ettiğini söylemiştik. Demek ki bizim de test içerisinde bu işlemi mock’lamamız lazım. Onun için DTO ve modelimi oluşturuyorum. Modeli mock’luyorum, DTO’yu ise çağırdığımız servisin metodu ile gönderiyorum. (Dipnot : Metot içerisindeki yapılan işlemler mock’lanmadan o metodu çağıramayız.) En sonunda assertEquals ile servisimizden dönen yanıt ile bizim oluşturduğumuz modeli karşılaştırıyoruz. Test tamamen doğru gittiği için sonuç doğru çıkıyor ve testimiz sonlanıyor. Mock’ladığımız metot’un kaç kere çalıştığını ve hangi metodu çalıştırdığını Mockito’nun verify fonksiyonu ile kontrol edebiliyoruz.

Testimizin başarılı senaryosunu tamamladık. Şimdi hata durumunu testimizde nasıl handle edeceğimizi göreceğiz. Az önceki gibi DTO’muzu oluşturduk ancak URL alanını boş bıraktık. Hata durumunu JUnit kütüphanesindeki Assertions’ın assertThrows fonksiyonuyla kontrol edeceğiz. İlk parametre olarak hangi hata ile karşılaşacağımızı, ikinci parametre olarak da bu hatayı hangi fonksiyonun içinde alacağımızı eşitledikten sonra bu kısmı da tamamlamış bulunuyoruz.

Ek olarak test metotlarımızın isimleri, yapılan testi açıklayıcı bir nitelikte olmalıdır. Test metotlarında ekstra bir durum varsa isimlendirmelerde onu da belirtmemiz gerekiyor. Bu, kodu okuyacak kişi için büyük kolaylık sağlayacaktır. Çünkü ileride test içerisinde herhangi bir değişiklik yapılacaksa bu, bize yol gösterici olacaktır.

--

--