📦 POJO & Jackson — Tip-Safe API Testi
POJO & Jackson — Tip-Safe API Testi: Ham String JSON yazmak, bir sözleşme metnini elle kopyalayan noter gibidir: her harfi tek tek basar, yanlış yazsa imza tökezler ama kağıt kab
Ham String JSON yazmak, bir sözleşme metnini elle kopyalayan noter gibidir: her harfi tek tek basar, yanlış yazsa imza tökezler ama kağıt kabul eder — hata ancak mahkemede ortaya çıkar. POJO kullanmak ise o sözleşme metnini bir yazılım şablonuna dönüştürmek gibidir: "ad" alanını boş bırakırsan derleme aşamasında kırmızı uyarı alırsın, imzaya gitmeden önce. Peki REST Assured `body(jsonString)` ile de çalışıyor; neden POJO'ya geçmek gerekiyor? Çünkü `"email":"test@test.com "` (sondaki boşluk) gibi bir yazım hatası test'i bazen geçirir bazen geçirmez — flaky test kaynağını bulmak saatler alır. Java'da Jackson ve Lombok, `@Data @Builder` anotasyonlarıyla bunu çözer: `UserRequest.builder().email(email).build()` yaptığında IDE email alanını tamamlar ve eksik bırakırsan derleme hatası verir. QA açısından gerçek değer: POJO'nun `@JsonProperty("email_address")` anotasyonu API'nin snake_case field'ını Java camelCase değişkeninle eşler — bu uyumsuzluğu String'de yapsan `NullPointerException` alırsın; POJO'da otomatik çözülür ve response'dan parse edilen değer doğrudan assertion'a akar.
POJO Nedir? — Java Analogisi
Java'da HashMap ile String key/value sakladığında typo yapabilirsin, tip güvenliği yoktur. POJO (Plain Old Java Object) ise alan isimlerini ve tiplerini sınıf olarak tanımlamaktır — tıpkı HashMap'i type-safe hale getirmek gibi.
❌ String JSON (Kırılgan)
IDE'nin typo'yu yakalaması imkansız.
IDE anında işaretler. Refactor otomatik.
Request POJO — Lombok ile Temiz Kod
Micro Lab: REST Assured assertion yazma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
@JsonInclude(NON_NULL) Doldurulmayan Alanları Nasıl Gizler?
@Data + @Builder Lombok anotasyonları…
`@Data` + `@Builder` Lombok anotasyonları, getter/setter/constructor kodunu DERLEME zamanında OTOMATİK üretir — bu kodu elle YAZMAN gerekmez, IDE'de de GÖRÜNMEZ ama derlenmiş sınıfta VARDIR.
@JsonInclude(NON_NULL) sayesinde…
`@JsonInclude(NON_NULL)` sayesinde `.name("Alice").job("QA").build()` çağrısı `firstName`/`lastName`'i JSON'a HİÇ YAZMAZ — null alanlar sessizce ATLANIR, `"firstName":null` gibi gürültü ÜRETMEZ.