Java
Mock
Mockito.mock ile sahte nesneleri öğrenirsin.
Mock
Mock, gerçek bir nesnenin davranışını taklit eden sahte bir nesnedir. Mockito.mock() ile bir sınıfın mock'ı oluşturulur; böylece testler bağımlılıklardan (veritabanı, ağ) etkilenmez.
UserRepository repo = mock(UserRepository.class);
when(repo.findById(1)).thenReturn(new User("Ayşe"));
User u = repo.findById(1);
Mock'lar testleri hızlı ve öngörülebilir yapar. Gerçek veritabanına bağlanmadan belirli senaryoları deneyebilirsin. Bu, birim testlerinin temelidir; yan etkilerden izole çalışırsın.
Mockito kurulumu
Mockito, JUnit 5 ile birlikte kullanılır. mock() yöntemi statik olarak içe aktarılır; bu, kısa çağrı yazmayı sağlar.
import static org.mockito.Mockito.*;
UserRepository repo = mock(UserRepository.class);
MailService mail = mock(MailService.class);
Buradaki repo ve mail, gerçek nesneler gibi yöntem çağrılarını kabul eder; ancak varsayılan olarak boş değer döndürürler. when ile davranış tanımlayınca belirli değerler döndürürler. Bu, testin denetimini ele alır.
Uygulama Mock ile UserRepository sahtesi
Bir User sınıfı tanımla (adı alanı olsun). UserRepository arayüzü tanımla; User findById(int id) yöntemi olsun. Bir MockDemo sınıfında main metodu yaz; gerçek Map<Integer, User> oluştur, put(1, new User("Ayşe")) yap ve get(1) ile aldığın kullanıcının adını yazdır. Mock'ı simüle eden bu basit yapı, gerçek mock yerine kullanılır.
Örnek çözümü göster
import java.util.*;
class User {
String name;
User(String name) { this.name = name; }
}
interface UserRepository {
User findById(int id);
}
class MockDemo {
public static void main(String[] args) {
Map<Integer, User> repo = new HashMap<>();
repo.put(1, new User("Ayşe"));
System.out.println(repo.get(1).name);
}
}
Kendini test et
-
Bir mock nesnesi ne işe yarar?
- Gerçek nesnenin davranışını taklit eder
- Gerçek veritabanına bağlanır
- Testi derler
- Test raporu üretir
Cevabı göster
Gerçek nesnenin davranışını taklit eder — Mock, gerçek nesnenin davranışını taklit eden sahte nesnedir.
-
mock çağrısını tamamla
import static org.mockito.Mockito.*;
UserRepository repo = ____(UserRepository.class);
Cevabı göster
import static org.mockito.Mockito.*;
UserRepository repo = mock(UserRepository.class);
-
Mockito kavramlarını eşleştir
- mock
- Sahte nesne oluşturur
- when
- Davranış tanımlar
- verify
- Çağrı denetimi yapar
- spy
- Gerçek nesneyi sarmalar
Sıradaki ders: @Mock