✅ Assertions — Hamcrest Derinlemesine
Assertions — Hamcrest Derinlemesine: Hamcrest assertion'ı, bir kalite kontrol memurunun ürün ölçüm raporuna benzer: "ölçülen: 10.2 mm, tolerans: 10.0±0.5, GEÇER" yazmak yerine sa
Hamcrest assertion'ı, bir kalite kontrol memurunun ürün ölçüm raporuna benzer: "ölçülen: 10.2 mm, tolerans: 10.0±0.5, GEÇER" yazmak yerine sadece "GEÇER" demek yeterli değildir — ne ölçüldüğü, neyle karşılaştırıldığı ve fark ne kadar olduğu raporun kendisinde görünmeli. Peki `assertEquals(200, response.statusCode())` yeterli olmuyor mu; neden `assertThat(statusCode, equalTo(200))` gibi daha uzun syntax kullanılıyor? Çünkü `assertEquals` başarısız olduğunda sadece "expected: 200 but was: 401" yazar — Hamcrest ise "Expected: a value equal to but: was " yazar ve üstelik `hasItems`, `containsString`, `greaterThan`, `hasKey` gibi ifadeleri zincirlemenize izin verdiğinden tek satırda hem HTTP statusu hem body'nin belirli alanını hem de response süresini doğrulayabilirsiniz. Java'da JUnit'in `assertAll()` ile birden fazla assertion'ı bir arada çalıştırmak gibidir — fark şu ki Hamcrest'in hata mesajı insan diline çok daha yakın. QA açısından gerçek tehlike: `assertTrue(response.statusCode() == 200)` başarısız olduğunda yalnızca "expected true but was false" yazar; aldığın gerçek status code görünmez — bu da CI log'larında 50 satır arasında doğru kodu bulmaya çalışmak demektir.
Tüm Önemli Hamcrest Matchers
Micro Lab: REST Assured assertion yazma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Neden 6 Farklı Matcher Kategorisi Var, Tek Bir equalTo() Yetmez mi?
equalTo/not/equalToIgnoringCase TAM…
`equalTo`/`not`/`equalToIgnoringCase` TAM eşleşme ailesidir; `notNullValue`/`nullValue`/`emptyString` ise VARLIK kontrolüdür — biri "değer NE", diğeri "değer VAR MI" sorusuna cevap verir.
greaterThan/between/lessThan SAYISAL…
`greaterThan`/`between`/`lessThan` SAYISAL aralık kontrolüdür — `age` alanının TAM OLARAK 25 olmasını değil, MANTIKLI bir aralıkta olmasını doğrularsın, bu daha GERÇEKÇİ bir testtir.
hasSize/hasItem/everyItem KOLEKSİYON…
`hasSize`/`hasItem`/`everyItem` KOLEKSİYON matcher'larıdır — bunlar olmadan bir diziyi doğrulamak için elle `for` döngüsü YAZMAN gerekirdi.
`anyOf(equalTo(200), equalTo(201))` TEK satırda "200 VEYA 201 kabul et" der — API bazen 200 bazen 201 dönebiliyorsa, iki AYRI test yazmak yerine bu TEK matcher yeterlidir.
Soft Assertions — Tüm Hataları Topla
Adim Adim: REST Assured assertion yazma