✅ 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