Java
@Mock
@Mock ile mock enjeksiyonunu öğrenirsin.
@Mock
@Mock annotation'ı, bir alanı mock olarak işaretler. Bu, mock() çağrısı yapmaktan daha kısa bir yoldur. Mock'ların başlatılması için MockitoAnnotations.openMocks(this) çağrılır.
class UserServiceTest {
@Mock UserRepository repo;
@Mock MailService mail;
@BeforeEach
void setup() {
MockitoAnnotations.openMocks(this);
}
}
Çok sayıda mock gerektiğinde bu yöntem daha okunabilirdir. Field tanımı ile mock türleri tek bakışta görünür. Bu, modern Mockito kullanımının önerilen yoludur.
@InjectMocks
@InjectMocks, mock'ları test edilen sınıfa otomatik olarak enjekte eder. Kurucu, setter veya alan enjeksiyonu deneyerek bağımlılıkları yerleştirir.
@InjectMocks UserService service;
// service, yukarıdaki @Mock repo ve mail ile enjekte edilir
Bu, elle new UserService(repo, mail) yazmaktan kurtarır. Sınıfın bağımlılık yapısı değişse bile test güncellenmez. Bu, temiz test kodu için önemli bir kolaylıktır.
Uygulama UserService ve bağımlılıklarını kur
Bir Logger arayüzü tanımla (void log(String msg)). UserService sınıfı tanımla; kurucu Logger logger alsın ve greet(String name) yöntemi logger.log("Hello " + name) çağrısı yapsın. Bir InjectDemo sınıfında main metodu yaz; Logger için basit bir uygulama (Anonymous sınıf ya da lambda yerine somut sınıf) yaz, new UserService(logger) ile hızmeti oluştur ve greet("Ayşe") çağır.
Örnek çözümü göster
interface Logger {
void log(String msg);
}
class ConsoleLogger implements Logger {
public void log(String msg) {
System.out.println(msg);
}
}
class UserService {
Logger logger;
UserService(Logger logger) { this.logger = logger; }
void greet(String name) {
logger.log("Hello " + name);
}
}
class InjectDemo {
public static void main(String[] args) {
UserService s = new UserService(new ConsoleLogger());
s.greet("Ayşe");
}
}
Kendini test et
-
Mock annotation'ını tamamla
class UserServiceTest {
____ UserRepository repo;
@Mock MailService mail;
}
Cevabı göster
class UserServiceTest {
@Mock UserRepository repo;
@Mock MailService mail;
}
-
@InjectMocks ne yapar?
- Mock oluşturur
- Mock'ları test edilen sınıfa enjekte eder
- Test raporu üretir
- Test çalıştırır
Cevabı göster
Mock'ları test edilen sınıfa enjekte eder — @InjectMocks, mock'ları test edilen sınıfa otomatik enjekte eder.
-
Mockito annotation'larını eşleştir
- @Mock
- Sahte nesne alanı
- @InjectMocks
- Mock'ları sınıfa enjekte eder
- @Spy
- Gerçek nesneyi sarmalar
- @Captor
- Argüman yakalayıcı
Sıradaki ders: when thenReturn