Gökmen Tuksavul

Blog Yazısı

2026-05-04

JUnit 5 ve Mockito ile Test Stratejileri

Spring Boot uygulamalarında JUnit 5 ve Mockito kullanarak profesyonel birim test (unit test) ve entegrasyon testi yazma stratejilerini kod örnekleriyle öğrenin.

TestingJUnitMockito

Sponsorlu

Spring Boot projelerinde test stratejisi yüksek coverage sayısına indirgenmemelidir. Amaç, değişiklik yapıldığında hangi davranışın bozulduğunu hızlı ve güvenilir şekilde görebilmektir. Bu nedenle unit test, slice test ve entegrasyon testlerinin görevleri ayrılmalıdır.

Unit test

Unit test framework bağımlılığını minimumda tutmalıdır. Domain servisleri, validasyon kuralları ve hesaplama fonksiyonları Spring context açmadan test edilebiliyorsa bu tercih edilmelidir. Böylece testler hızlı çalışır ve hata yeri daha net görünür.

Mockito sınırı

Mockito dış bağımlılıkları kontrol etmek için kullanılmalıdır: repository, HTTP client veya message publisher gibi. Value object, mapper veya saf domain fonksiyonlarını mocklamak testleri gereksiz kırılgan hale getirir.

Slice test

WebMvcTest ve DataJpaTest gibi slice testler belirli katmanın framework entegrasyonunu doğrular. Controller için request validation, status code ve response formatı bu seviyede test edilebilir. Tüm uygulama contextini açmaya gerek kalmaz.

Entegrasyon testi

SpringBootTest daha yavaştır ama migration, transaction sınırı, security filter zinciri veya gerçek repository davranışı için değerlidir. Testcontainers kullanmak production veritabanı davranışına daha yakın sonuç verir.

Sonuç

İyi test stratejisi doğru seviyede test yazmaktır. Hızlı unit testler, dar kapsamlı slice testler ve sınırlı ama anlamlı entegrasyon testleri birlikte kullanıldığında hem güven hem teslimat hızı korunur.

Pratik uygulama notu

Test yazarken en iyi başlangıç noktası geçmişte hata üretmiş davranışlardır. Önce fiyat hesaplama, yetki kontrolü, tarih kuralı ve dış servis hatası gibi iş açısından riskli kararlar korunmalıdır. Daha sonra controller validation ve repository sorguları eklenebilir. Böyle ilerlemek coverage sayısından daha anlamlı bir güvenlik ağı oluşturur.