Java
ArgumentMatchers
ArgumentMatchers ile esnek argümanları öğrenirsin.
ArgumentMatchers
ArgumentMatchers ile mock çağrıları esnek biçimde eşleştirilir. any() herhangi bir değeri, eq("x") belirli bir değeri, anyInt() herhangi bir tamsayıyı eşleştirir.
when(repo.findById(anyInt()))
.thenReturn(new User("Ayşe"));
verify(mail).send(eq("Ayşe"));
Bu, sabit değer yerine bir kategori belirtmeyi sağlar. Eşleştirici kullanınca tüm bağımsız değişkenler eşleştirici olmalı; karışık kullanım yapılamaz. Bu ilkeye dikkat etmek gerekir.
Eşleştirici karışım ilkesi
Bir çağrıda eşleştirici kullanırsan, tüm bağımsız değişkenler eşleştirici olmalıdır. Sabit değerle eşleştiriciyi karıştıramazsın. Sabit değer için eq() kullanılır.
// Geçerli:
verify(mail).send(eq("Ayşe"));
// Geçersiz (karışık):
// verify(mail).send("Ayşe", anyString());
Bu ilke, Mockito'nun eşleştirme mekanizmasından kaynaklanır. eq() ile sabit değerleri sararak ilkeye uyulur. Bu, yeni başlayanların sıklıkla düştüğü bir hatadır.
Uygulama Eşleştirici mantığını kur
Bir Matcher sınıfı tanımla; boolean matchesAny(int v) her zaman true döndürsün, boolean matchesEq(int v, int target) v == target döndürsün. Bir MatcherDemo sınıfında main yaz; matchesAny(5) ve matchesEq(5, 5) çağrılarının sonuçlarını (true, true) yazdır.
Örnek çözümü göster
class Matcher {
boolean matchesAny(int v) {
return true;
}
boolean matchesEq(int v, int target) {
return v == target;
}
}
class MatcherDemo {
public static void main(String[] args) {
Matcher m = new Matcher();
System.out.println(m.matchesAny(5));
System.out.println(m.matchesEq(5, 5));
}
}
Kendini test et
-
anyInt çağrısını tamamla
when(repo.findById(____)).thenReturn(new User("Ayşe"));
Cevabı göster
when(repo.findById(anyInt())).thenReturn(new User("Ayşe"));
-
Bir çağrıda any() kullanırsan diğer bağımsız değişkenler nasıl olmalıdır?
- Tüm bağımsız değişkenler eşleştirici olmalı
- Sabit değer olabilir
- Yalnızca String olabilir
- Boş bırakılabilir
Cevabı göster
Tüm bağımsız değişkenler eşleştirici olmalı — Bir eşleştirici kullanırsan tüm bağımsız değişkenler eşleştirici olmalı.
-
Eşleştiricileri eşleştir
- any()
- Herhangi bir nesne
- anyInt()
- Herhangi bir tamsayı
- eq("x")
- Belirli bir değer
- anyString()
- Herhangi bir dizgi
Sıradaki ders: Özet - Mockito