CodeBlanks Logo Icon CodeBlanks

when thenReturn

when(...).thenReturn() ile davranış taklitlerini öğrenirsin.

when thenReturn

when(mock).thenReturn(value) ile bir mock yöntemine verilen girdi için hangi değerin döneceği tanımlanır. Böylece test senaryosu tam denetim altında olur.

UserRepository repo = mock(UserRepository.class);
when(repo.findById(1)).thenReturn(new User("Ayşe"));

User u = repo.findById(1);
// u.getName() eşittir "Ayşe"

Bu, gerçek veritabanı olmadan belirli bir senaryoyu yeniden üretir. Farklı girdiler için farklı dönüş değerleri tanımlayabilirsin. Exception fırlatmak için thenThrow kullanılır.

thenThrow ile istisna

Bir mock yönteminin istisna fırlatması için thenThrow kullanılır. Bu, hata senaryolarını test etmenin kolay yoludur.

when(repo.findById(99))
    .thenThrow(new UserNotFoundException(99));

Çağıran kod, bu istisnayı try/catch ile yakalar ve hata akışını doğrular. Bu, gerçek bir hata üretmeden hata yolunu test etmeni sağlar. Hata işleme kodu böylece güvenle sınanır.

Uygulama Stub mantığını elle kur

Bir Discount sınıfı tanımla; rateFor(String code) yöntemi olsun. Bu yöntem bir Map<String, Integer> kullanarak kod karşılığı indirimi döndürsün; bilinmeyen kod için 0 döndürsün. Bir StubDemo sınıfında main metodu yaz; map'e put("SUMMER", 20) ve put("WINTER", 15) ekleyin; rateFor("SUMMER") sonucunu yazdır.

Başlangıç kodu

Main.java
import java.util.*;

// Discount sınıfını tanımla (rateFor yöntemi Map kullanır)

// StubDemo sınıfında main yaz; map'e kod ekle ve rateFor sonucunu yazdır

Örnek çözüm

Main.java
import java.util.*;

class Discount {
    Map<String, Integer> table = new HashMap<>();
    int rateFor(String code) {
        return table.getOrDefault(code, 0);
    }
}

class StubDemo {
    public static void main(String[] args) {
        Discount d = new Discount();
        d.table.put("SUMMER", 20);
        d.table.put("WINTER", 15);
        System.out.println(d.rateFor("SUMMER"));
    }
}

Beklenen çıktı

20

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Stubbing yöntemlerini eşleştir

Kavram Anlamı
thenReturn Belirli değer döndürür
thenThrow İstisna fırlatır
thenAnswer Özel yanıt üretir
thenCallRealMethod Gerçek yöntemi çağırır

2 thenReturn çağrısını tamamla

Soru
when(repo.findById(1))
    .____(new User("Ayşe"));
Cevap
when(repo.findById(1))
    .thenReturn(new User("Ayşe"));

Açıklama: thenReturn belirli değeri döndürür.

3 when(repo.findById(1)).thenReturn(...) ne yapar?

  • repo mock'ına findById(1) çağrısı için dönüş değeri tanımlar Doğru cevap
  • findById yöntemini siler
  • findById yöntemini çağırır
  • repo'yu gerçek nesneye çevirir

Açıklama: Bu ifade, findById(1) çağrısı için dönüş değeri tanımlar.

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