CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

Main.java
// 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

Main.java
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

Soru
when(repo.findById(____)).thenReturn(new User("Ayşe"));
Cevap
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

İleri seviye bölümündeki tüm dersler