when thenReturn
- Java kursu
- İleri seviye
- Ders 51/82
- 5 dk
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
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
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
when(repo.findById(1))
.____(new User("Ayşe"));
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.