ArgumentMatchers
- Java kursu
- İleri seviye
- Ders 53/82
- 5 dk
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.
Başlangıç kodu
// Matcher sınıfını tanımla (matchesAny ve matchesEq yöntemleri)
// MatcherDemo sınıfında main yaz; iki sonucu alt alta yazdırÖrnek çözüm
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));
}
}Beklenen çıktı
true true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 anyInt çağrısını tamamla
when(repo.findById(____)).thenReturn(new User("Ayşe"));
when(repo.findById(anyInt())).thenReturn(new User("Ayşe"));
Açıklama: anyInt() herhangi bir tamsayıyı eşleştirir.
2 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ı Doğru cevap
- Sabit değer olabilir
- Yalnızca String olabilir
- Boş bırakılabilir
Açıklama: Bir eşleştirici kullanırsan tüm bağımsız değişkenler eşleştirici olmalı.
3 Eşleştiricileri eşleştir
| Kavram | Anlamı |
|---|---|
any() |
Herhangi bir nesne |
anyInt() |
Herhangi bir tamsayı |
eq("x") |
Belirli bir değer |
anyString() |
Herhangi bir dizgi |