20 Ocak 2018 Cumartesi
@Transactional Servise Mockito ile Mock Servis Enjekte Etme
Merhabalar. Bu yazımızda Java projelerimizde kullandığımız Mockito kütüphanesi ile, @Transactional anotasyonuna sahip bir servise mock servis enjekte edememe probleminden ve çözümünden bahsedeceğiz.
Öncelikle, neden mock (yapay, sahte) servis kullanıldığından bahsedelim. Unit test yazarken testin gerçekten unit olması için test ettiğiniz kod parçasının başka kodlara bağımlılığının olmaması gerekmektedir. Örneğin, sipariş toplam ücretini hesaplayan bir servis düşünelim. Ham ücrete eklenen vergi miktarını başka bir servisten hesaplatıp kullandığını düşünelim. Sipariş ücretini hesaplayan metodu sağlıklı test edebilmek için, vergiyi hesaplayan metoddan hatalı sonuç dönmeyeceğinden emin olmalıyız. Bu nedenle vergi hesaplayan metodun orjinal kodunu çalıştırmadan, doğrudan istediğimiz sonucu dönmesi için vergi servisini "mocklarız".
Mockito çatısını kullanırken bu işlemi @Mock anotasyonu ile yaparız. Test ettiğimiz servisin içindeki bir servise mock sevisimizi enjekte etmek için @InjectMocks anotasyonunu kullanırız. Yalnız, inject edilen servis @Transactional anotasyonuna sahip ise, enjekte işlemi gerçekleşmiyor. Çünkü, transactional servis, java proxy nesneye dönüştürüldüğü için, Mockito enjekte edecek sınıf elemanı bulamıyor. Bu problemi aşmak için, mock servisleri hazırladığımız sırada, ReflectionTestUtils kullanarak manuel olarak servisi enjekte ederek aşabiliriz.
Aşağıdaki kodlarla daha anlaşılır olacaktır.
"admin" kullanıcı adını dönen UserService.
UserService'den dönen kullanıcı adını customerName olarak dönen CustomerService.
UserService sınıfının getUserName metodunu mock user name dönmesini istememize rağmen, CustomerService @Transactional olduğundan içindeki UserService mocklanamadığı için test başarısız olmaktadır.
CustomerService içindeki UserService ReflectionTestUtils ile mocklandığı için, test başarılı sonuçlanmaktadır.
Kaydol:
Kayıt Yorumları (Atom)
Masraf Takibi - Gider Yönetimi Android Uygulaması
Merhabalar. Masraf Takibi & Gider Yönetimi uygulaması yayınlandı! Google Play Store'da şuradan indirebilirsiniz! Ölçemezseniz, ...


-
Odaklanmak, 1000 iyi fikre hayır diyebilmektir. Steve Jobs Kod yalan söylemez, yorumlar bazen söyler. Ron Jeffries Tasarım, nas...
-
OCR (Optical Character Recognition - Optik Karakter Tanıma), bize grafiksel dosyalardaki yazıları yakalama imkanı veren teknolojidir. Örne...
-
Merhabalar, Özellikle esnaf kardeşlerin işine yarayacağını düşündüğümüz bir uygulama geliştirdik. link = QR Code & Barkod Okuyucu ...

Hiç yorum yok:
Yorum Gönder