Java
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.
Örnek çözümü göster
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"));
}
}
Kendini test et
-
Stubbing yöntemlerini eşleştir
- 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
-
thenReturn çağrısını tamamla
when(repo.findById(1))
.____(new User("Ayşe"));
Cevabı göster
when(repo.findById(1))
.thenReturn(new User("Ayşe"));
-
when(repo.findById(1)).thenReturn(...) ne yapar?
- repo mock'ına findById(1) çağrısı için dönüş değeri tanımlar
- findById yöntemini siler
- findById yöntemini çağırır
- repo'yu gerçek nesneye çevirir
Cevabı göster
repo mock'ına findById(1) çağrısı için dönüş değeri tanımlar — Bu ifade, findById(1) çağrısı için dönüş değeri tanımlar.
Sıradaki ders: verify