Quarkus TDD İş Akışı
80%+ kapsam (unit + integration) ile Quarkus 3.x servisleri için TDD rehberi. Apache Camel ile event-driven mimariler için optimize edilmiştir.
When to Use
- Yeni özellikler veya REST endpoint'leri
- Bug düzeltmeleri veya refactoring'ler
- Veri erişim mantığı, güvenlik kuralları veya reaktif akışlar ekleme
- Apache Camel route'larını ve event handler'larını test etme
- RabbitMQ ile event-driven servisleri test etme
- Koşullu akış mantığını test etme
- CompletableFuture async işlemlerini doğrulama
- LogContext yayılımını test etme
How It Works
- Önce testleri yazın (başarısız olmalılar)
- Geçmek için minimal kod uygulayın
- Testleri yeşil tutarken refactor edin
- JaCoCo ile kapsamı zorlayın (%80+ hedef)
Examples
@Nested Organizasyonlu Unit Testler
Kapsamlı ve okunabilir testler için bu yapılandırılmış yaklaşımı izleyin:
Temel Test Desenleri
- @Nested Sınıflar: Testleri test edilen metoda göre gruplandırın
- @DisplayName: Test raporlarında okunabilir açıklamalar sağlayın
- İsimlendirme Kuralı: Netlik için
givenX_whenY_thenZ - AAA Deseni: Açık
// ARRANGE,// ACT,// ASSERTyorumları - @BeforeEach: Tekrarı azaltmak için ortak test verisi kurulumu
- assertDoesNotThrow: Exception yakalamadan başarı senaryolarını test edin
- assertThrows: AssertJ kullanarak mesaj doğrulamalı exception senaryolarını test edin
- Kapsamlı Kapsam: Mutlu yolları, null girdileri, edge case'leri, exception'ları test edin
- Etkileşimleri Doğrulama: Metodların doğru çağrıldığından emin olmak için Mockito
verify()kullanın - Hiçbir Zaman Doğrulama: Hata senaryolarında metodların ÇAĞRILMADIĞINI sağlamak için
never()kullanın
Camel Route Testi
Event Service Testi
CompletableFuture Testi
Resource Katmanı Testleri (REST Assured)
Gerçek Veritabanıyla Entegrasyon Testleri
JaCoCo ile Kapsam
Maven Yapılandırması (Tam)
Kapsam ile testleri çalıştırın:
Test Bağımlılıkları
En İyi Uygulamalar
Test Organizasyonu
- Testleri test edilen metoda göre gruplandırmak için
@Nestedsınıflar kullanın - Raporlarda görünür okunabilir açıklamalar için
@DisplayNamekullanın - Test metodları için
givenX_whenY_thenZisimlendirme kuralını izleyin - Tekrarı azaltmak için ortak test verisi kurulumunda
@BeforeEachkullanın
Test Yapısı
- Açık yorumlarla AAA desenini izleyin (
// ARRANGE,// ACT,// ASSERT) - Başarı senaryoları için
assertDoesNotThrowkullanın - Mesaj doğrulamalı exception senaryoları için
assertThrowskullanın - AssertJ
contains()veyaisEqualTo()kullanarak exception mesajlarının beklenen değerlerle eşleştiğini doğrulayın
Test Kapsamı
- Tüm public metodlar için mutlu yolları test edin
- Null girdi işlemeyi test edin
- Edge case'leri test edin (boş koleksiyonlar, sınır değerleri, negatif ID'ler, boş string'ler)
- Exception senaryolarını kapsamlı biçimde test edin
- Tüm harici bağımlılıkları mock'layın (repository'ler, servisler, Camel endpoint'leri)
- %80+ satır kapsamı, %70+ branch kapsamı hedefleyin
Assertion'lar
- Değer kontrolleri için JUnit assertion'ları yerine AssertJ'yi tercih edin (
assertThat) - Okunabilirlik için akıcı AssertJ API'si kullanın:
assertThat(list).hasSize(3).contains(item) - Exception'lar için: JUnit
assertThrowsile yakalayın, ardından AssertJ ile mesajı doğrulayın - Fırlatılmayan başarı yolları için: JUnit
assertDoesNotThrowkullanın - Koleksiyonlar için:
extracting(),filteredOn(),containsExactly()
Entegrasyon Testi
- Entegrasyon testleri için
@QuarkusTestkullanın - Quarkus testlerinde bağımlılıkları mock'lamak için
@InjectMockkullanın - API testi için REST Assured'ı tercih edin
- Test'e özel yapılandırma için
@TestProfilekullanın
Event-Driven Test
AdviceWithveMockEndpointile Camel route'larını test edin@CamelQuarkusTestannotasyonu kullanın (bağımsız Camel testleri kullanıyorsanız)- Mesaj içeriğini, başlıklarını ve yönlendirme mantığını doğrulayın
- Hata işleme route'larını ayrı ayrı test edin
- Unit testlerde harici sistemleri (RabbitMQ, S3, veritabanları) mock'layın
Camel Route Testi
- Mesaj akışını doğrulamak için
MockEndpointkullanın - Test için route'ları değiştirmek üzere
AdviceWithkullanın (endpoint'leri mock'larla değiştirin) - Mesaj dönüşümünü ve marshalling'i test edin
- Exception işleme ve dead letter queue'ları test edin
Async İşlem Testi
- CompletableFuture başarı ve başarısızlık senaryolarını test edin
- Async tamamlanmayı beklemek için testlerde
.join()kullanın - CompletableFuture'dan exception yayılımını test edin
- LogContext yayılımını async işlemlere doğrulayın
Performans
- Testleri hızlı ve izole tutun
- Testleri sürekli modda çalıştırın:
mvn quarkus:test - Girdi varyasyonları için parametreli testler (
@ParameterizedTest) kullanın - Yeniden kullanılabilir test verisi builder'ları veya factory metodları oluşturun
Quarkus'a Özgü
- En son LTS sürümünde kalın (Quarkus 3.x)
- Native derleme uyumluluğunu periyodik olarak test edin
- Farklı senaryolar için Quarkus test profillerini kullanın
- Yerel test için Quarkus dev servislerinden yararlanın
@MockBeanyerine@InjectMockkullanın (Quarkus'a özgü)
Doğrulama En İyi Uygulamaları
- Mock'lanmış bağımlılıklardaki etkileşimleri her zaman doğrulayın
- Hata senaryolarında metodların ÇAĞRILMADIĞINI sağlamak için
verify(mock, never())kullanın - Karmaşık argüman eşleştirme için
argThat()kullanın - Önem taşıdığında çağrı sırasını doğrulayın: Mockito'dan
InOrder


