Yazılım dünyası için eski benim için yeni bir konu olan unit test konusuna hızlıca bir göz atacağız. Yeni şirketimde yapılan her iş için unit test yazılıyor, bu da demek ki oluyor ki artık aktif olarak unit test yazacağım. Ben de her zaman yaptığım gibi yeni bir konuyu öğrenirken, burada da paylaşayım dedim 🙂
Unit test(birim test), adından anlayacağımız üzere test edilebilen en küçük birimi test eden kod blogudur. Temelde yaptığı; kodun veya sınıfın, belli girdiler ile doğru çalışıp, istenilen sonucu üretip üretmediğini kontrol etmektir. Ufak ufak parçaları test ederek, bütün bir yazılımın en azından çalıştığını görebiliyoruz.
Peki unit testler ile akış içerisindeki tüm bugları bulabilir miyiz? Hayır! Birim testler yalnızca o birimi o fonksiyonu test eder.
Unit testler yazılım testlerinin ilk adımıdır. Komple akışı test etmek için başka testler(integration test, api test vs) yapmak gerekir.
Neden yazılır?
- Başka developerlar bizim yazdığımız kodları nasıl kullanacaklarını unit testlere bakarak daha iyi anlayabilir.
- Yazdığımız hiç bir kod sonsuza kadar aynı kalmaz. Elbet bir gün refactor edilecek veya eklemeler yapılacaktır. İşte kodun burasını değiştirirsem ne olur? Nereleri patlatırım vs gibi kafamızı kurcalayan sorulardan bizi kurtarır. Kodumuzu yazdıktan sonra unit testleri çalıştırmamız yeterli olacaktır. Bize patlayan çatlayan her yeri gösterir 🙂
- Bizleri kaliteli kod yazmaya teşvik eder. Düzgün birim testler yazabilmemiz için, test edeceğimiz sınıfın bileşenleri ile gevşek bağlı(loosely coupled) olması gerekir. Böylelikle biz de testlerimizi yazarken mocking yapabiliriz. Eğer sıkı sıkıya bağlı(tightly coupled) olsaydı; ki bu yazılımda istenmeyen bir durumdur, mock object kullanamazdık. Yazılım bileşenlerini birbirlerine gevşek bağlamak için Dependency Injection yöntemini kullanabiliri
Nasıl yazılmalıdır?
- Unit testler, kodu yazan developer tarafından yazılmalıdır.
- Okunaklı olmalıdır.
- Hızlı çalışmalıdır.
- Test yazılan birim, bileşenlerinden izole edilmelidir.
- Bağımlılıklar değil, yalnızca o birim test edilmelidir.
- Yazılan her test yalnız bir senaryoyu test etmelidir.
- Yazılan testler tak başına çalışabilmeli, birbirini hiç bir şekilde etkilememelidir.
- Unit test yazarken isimlendirme çok önemlidir.Test isimleri açıklayıcı olmalıdır. Uzun olabilir. MethodName_StateUnderTest_ExpectedBehavior şeklindeki isimlerdirme standartını kullanabiliriz.
- Test başarısız olduğunda anlaşılabilir bir data dönmelidir.