JUnit ile Servis Katmanı Testi-1

0 616

Bir önceki Controller testi yazısını okumadıysanız onunla başlayabilirsiniz.

Bu yazımızda öncelikle servis katmanı oluşturacağız bu bu katman için testler yazmaya çalışacağız.

UserService

Yukarıdaki gibi bir örnek sınıf oluşturdum, method içerisindeki kodlar bir anlam ifade etmemektedir.

Tamamen karşılaşabileceğiniz senaryolara benzerlik katabilmek için oluşturduğum kodlardır.

  • Şimdi bu method neleri içeri biraz inceleyelim.
  • Address nesnesi oluşturuyor.
  • Customer listesi oluşturuyor.
  • PaymentClient kullanarak payment nesnesi oluşturuyor.
  • Payment nesnesi üzerinden bir kontrol yapıyor ve dallanma oluşuyor.
  • En son olarak ise method görevi gereği UserRepository kullanarak kayıt yapıyor.

Genellikle ilk başlayanlar içi kafa karıştırıcı durum methodun yapmasını beklediğimiz işler ile bağımlı olduğu işleri karıştırım nasıl bir test yazacağını bilemem oluyor.

Örneğin zaten methodun kendi görevi olan Address nesnesini de test içerisinde oluşturmaya çalışıyor(Kendi gözlemim).

Biz ise bağımlılıkları anlayıp methoddan üzerine düşen görevi farklı durumlarda yani farklı verilerde istediğimiz işi yapıyor mu diye doğrulamaya çalışıyoruz.

Peki neler olabilir bu beklediğimiz durumlar?

  • Belli koşullarda hata verebilir.
  • Koşullara bağlı olarak bazı işler yapılırken yani methodlar çağrılırkenbazı durumlarda çağrılmaması olabilir.
  • Kodun gerekliliği olarak bazı method çağrılarını belli sayıda gerçekleştirilmesi olabilir. Örneğin bir method yalnızca iki kere çağrılması gerekebilir ve eğer üçüncü kez çağrılırsa bir sorun var demektir.
  • Bazı değişkenlerin istediğimiz değerlere sahip olması olabilir.

Bu bakış açısıyla testimizi yazmaya çalışalım.

Talk cheap, show me the code.

Unit Test

Servis methodu içerisindeki kırılımdan bahsetmiştik. Bir kırılımla beraber methotdan beklentimiz değişiyor.

Dolayısıyla farklı değerlerle methotdan ve dolayısıyla testten beklentimiz değişiyor.(bknz: branch testing)

 

Not: Zaman zaman gördüğüm bir davranış var bunu da paylaşmak istiyorum sizinle. O da şu ki yeni bir özellik eklendiğinde var olan bir test methodu hata verdiğinde bunu düzenlemek yerine silmek üzerine bir davranış oluşuyor ve ya disable etmeyi çözüm olarak düşünüyoruz fakat bu tabii ki doğru olmayan bir pratik. Çünkü hali hazırda yazılmış belirli kurallara göre çalışan bir test mevcut ve bu testin hata vermesi çok doğal. Bunu sildiğimiz durumda muhtemelen yeni bir özellik eklemek yerine sistemde yeni bug’lar oluşturuyoruz. Biz oluşturmasak bile bizden sonraki kişilerin oluşturması muhtemel. Bu sebeple sorunları görmezden gelmek yerine çözmeye çalışmak yeni sorunların oluşmasını engelleyecektir.

Test yazalım, yazmayanları uyaralım 😇😊

Tabii ki daha iyi bir test yazılabilir, farklılıklar olabilir. Yeni yazılarda bazı kısımları değiştiriyor olacağız. Yeni yazılarda görüşmek üzere.

Faydalı olması dileğiyle.

Email adresiniz yayınlanmayacaktır.