Java Test Otomasyonu 3D logosu yanında test tüpü ve onay rozeti bembeyaz arka planda premium kompozisyon

Java Test Otomasyonu eğitimi, "test yazıyoruz" iddiasını test piramidine oturmuş hızlı çalışan bir suite'e dönüştürür. JUnit 5 Jupiter API'sinin @Nested, @ParameterizedTest ve lifecycle ile kullanımı; AssertJ akıcı assertion ile okunabilir test yazımı somut senaryolar üzerinden işlenir.

Eğitim sonunda katılımcı, Mockito ile mock, verify ve ArgumentCaptor pattern kurar; Testcontainers ile gerçek DB ve service test yazar; WireMock ile external API'leri kontrollü mock eder. Cucumber ve Gherkin ile BDD feature dosyaları eğitimin test kültürü tarafıdır.

Katılımcı Profili

Bu eğitim, test piramidini iddialarla destekleyen bir suite'e oturtmak isteyen Java ekiplerine yöneliktir:

  • Java Geliştiriciler: Test piramidini hayata geçiren disiplinli mühendisler
  • QA Mühendisleri: JUnit 5, Mockito ve Testcontainers kullanan test ekipleri
  • SDET'ler: Test automation framework geliştiren roller
  • Backend Mühendisleri: TDD ile çalışmaya yatkın ekipler
  • Tech Lead'ler: Test stratejisi ve coverage hedefleri belirleyen liderler

Ön Gereklilikler

Bu eğitime katılım için aşağıdaki ön bilgiler önerilir:

  • Java ile temel uygulama geliştirme deneyimi
  • OOP kavramlarına (class, inheritance, interface) rahatlık
  • Unit test kavramına giriş düzeyi aşinalık
  • Maven veya Gradle ile build süreci bilgisi
  • Git ile sürüm kontrol akışı bilgisi

Süresi ve Tarihi

Süre: 3 gün. Bu süre standart program içindir; ek modüllere ve hedefe göre süre özelleştirilebilir.
Eğitim tarihleri ve saatleri, ekibinizin uygunluğuna göre birlikte planlanır.

Kazanımlar

Bu eğitim sonunda katılımcı, "test yazıyoruz" iddiasını piramide oturmuş, hızlı çalışan bir suite'e dönüştürür:

  • JUnit 5 Jupiter API'sini @Nested, @ParameterizedTest ve lifecycle ile kullanır
  • AssertJ akıcı assertion ile okunabilir test yazar
  • Mockito ile mock, verify ve ArgumentCaptor pattern'i kurar
  • Test piramidini (unit, integration, E2E) sorumluluk sınırlarıyla ayrıştırır
  • Testcontainers ile gerçek DB ve service testleri yazar
  • WireMock ile external API'leri kontrollü mock eder
  • Cucumber ve Gherkin ile BDD feature dosyaları oluşturur

Java Test Otomasyonu Eğitimi Konuları

1. Test Piramidi - Java Ekosisteminde

  • Unit, integration, end-to-end test seviyeleri
  • Test trophy ve Honeycomb alternatif modeller
  • Fast feedback ve test maliyet dengesi
  • Java ekosisteminde araç manzarası
  • Resmi kaynak: JUnit 5 kullanıcı kılavuzu

2. JUnit 5 - Jupiter API

  • @Test, @DisplayName, @Disabled
  • @BeforeEach, @AfterEach, @BeforeAll, @AfterAll
  • Assertion: assertEquals, assertAll, assertThrows
  • Lifecycle PER_METHOD vs PER_CLASS
  • JUnit 4'ten JUnit 5'e migration

3. JUnit 5 - Parametrize ve Dynamic Test

  • @ParameterizedTest ve kaynakları
  • @ValueSource, @CsvSource, @MethodSource
  • @TestFactory ile dynamic test üretimi
  • Tag, @Order ve test seçimi

4. AssertJ vs Hamcrest

  • AssertJ akıcı assertion (fluent)
  • Hamcrest matcher kütüphanesi
  • Custom assertion yazımı
  • Soft assertion ve gruplu doğrulama

5. Mockito ile Mocking

  • @Mock, @InjectMocks ile dependency
  • when().thenReturn() stubbing
  • Verify ile davranış doğrulama
  • doThrow, doAnswer alternatif stubbing

6. Mockito İleri - ArgumentCaptor, Spy

  • ArgumentCaptor ile çağrı parametresi yakalama
  • Spy ile gerçek nesne üzerinde mock
  • Static method mock (mockito-inline)
  • Final class mock yetenekleri
  • BDDMockito (given/when/then) söz dizimi

7. Test Doubles - Mock, Stub, Fake, Spy

  • Mock: davranış doğrulayan double
  • Stub: önceden tanımlı yanıt
  • Fake: çalışan basit implementasyon
  • Spy: gerçek + gözetlenmiş double
  • Dummy: sadece parametre dolgusu

8. Selenium WebDriver

  • WebDriver mimari ve browser driver
  • By locator: id, css, xpath
  • WebDriverWait ile explicit wait
  • Page Object Model (POM)
  • Selenium Grid ile paralel

9. Selenide ve Modern Web Test

  • Selenide ile concise API
  • Auto-wait ve resilient locator
  • Screenshot ve report otomasyonu
  • Playwright Java alternatifi

10. Cucumber ile BDD

  • Gherkin söz dizimi: Given-When-Then
  • Feature dosyası ve step definition
  • Cucumber + JUnit 5 entegrasyonu
  • Living documentation kavramı

11. REST API Test - REST Assured

  • given().when().then() akışı
  • JSON path ve XML path assertion
  • Authentication ve header yönetimi
  • Response time ölçümü
  • Schema validation

12. WireMock ile HTTP Stubbing

  • HTTP mock server kurulumu
  • Stub mapping ve response template
  • Scenario ile state-based test
  • Record-replay modu
  • Fault injection: delay, error

13. Testcontainers - Gerçek Bağımlılık

  • JUnit 5 @Testcontainers extension
  • PostgreSQL, MongoDB, Kafka container
  • Network ve container arası iletişim
  • GenericContainer ile custom image
  • Reuse mode ile hızlandırma

14. Spring Boot Test Slice

  • @SpringBootTest tam context
  • @WebMvcTest controller slice
  • @DataJpaTest repository slice
  • MockMvc ve TestRestTemplate
  • @MockBean ile bean replacement

15. Performance Test - Gatling ve JMeter

  • Gatling: Scala DSL ile load test
  • JMeter: GUI ve XML test plan
  • Ramp-up, sustained, spike senaryosu
  • Response time, throughput, error rate

16. CI Pipeline'da Test Çalıştırma

  • Maven Surefire ve Failsafe plugin
  • Gradle test task ve parallel execution
  • Test paralelizasyonu ve sharding
  • JUnit XML rapor ve PR decoration
  • Flaky test detection

17. Test Code Quality ve Maintainability

  • AAA (Arrange-Act-Assert) pattern
  • Object Mother ve Test Data Builder
  • Test code review checklist
  • Slow test izolasyonu (@Tag)

18. Mutation Testing - PITest

  • Mutation testing felsefesi
  • PITest Java araçları
  • Mutation score yorumlama
  • Surviving mutant analizi

JAVA TEST OTOMASYONU EĞİTİMİ ile İlgili
Sıkça Sorulan Sorular ve Cevapları


JUnit 5'in @Nested ve @ParameterizedTest avantajı nedir?

@Nested ilişkili test'leri grup halinde organize eder — context-based setup tek noktada. @ParameterizedTest aynı testi farklı input'larla çalıştırır; @ValueSource, @CsvSource, @MethodSource ile data sağlanır. Boilerplate azalır, edge case kapsamı artar. JUnit 4'ün eksiklerini doğrudan kapatan iki feature.

AssertJ ile Hamcrest arasındaki fark nedir?

AssertJ fluent zincir API (assertThat(x).isEqualTo(y).contains(z)) — auto-complete dostu ve hata mesajları açıklayıcı. Hamcrest matcher kompozisyonu güçlü ama söz dizimi daha karmaşık (assertThat(x, is(equalTo(y)))). Yeni Java projelerinde AssertJ standart tercih, Hamcrest legacy projelerde kalıyor.

Mockito ile MockK arasında nasıl seçim yapılır?

Mockito Java ekosisteminin de-facto mock framework'ü — geniş community ve kotlin desteği var. MockK Kotlin için tasarlandı, coroutine ve top-level function mock'unu native destekler. Java/Kotlin karma projede Mockito-kotlin köprüsü pratik; saf Kotlin projede MockK daha doğal.

Testcontainers ile in-memory DB arasında karar?

H2/HSQLDB hızlı ama PostgreSQL veya MySQL'in gerçek davranışını taklit etmez — JSON tip, sequence, custom function farkları sorun yaratır. Testcontainers gerçek DB'yi Docker'da ayağa kaldırır, production-paritesi sağlar ama CI'da daha yavaş. Integration test için Testcontainers tercih edilir.

WireMock ile dış API mock'u ne zaman gerekli?

Integration test'te 3rd party API çağrılarını gerçek servise yapmak flaky test'lere ve rate limit'e yol açar. WireMock stub'lar tanımlı response döner, request matching, scenario state ve fault injection (timeout, 500 error) ile gerçekçi simülasyon yapılır. Contract testing'e (Pact) doğru adımda alternatif.

Cucumber BDD ne zaman değer üretir, ne zaman overhead?

Business stakeholder Gherkin feature dosyasını okuyor ve katkı sağlıyorsa BDD değer üretir. Sadece geliştiriciler kullanıyorsa step definition katmanı gereksiz boilerplate olur — düz JUnit daha hızlı. BDD karar verilirken 'kim feature dosyası yazacak/okuyacak' sorusu net olmalı.