我的java項目有多層,比如Controller(取決於)Service(取決於)DAO。 我的目標是單元測試控制器。注入沒有java接口的模擬對象進行單元測試
我創建了Mock服務對象,將它注入Controller類。
谷歌搜索後,我瞭解到,我可以使用java界面來做到這一點。
理想情況下,服務層不需要接口。
我不知道是否有不同的方法來注入模擬對象沒有Java接口。
我的java項目有多層,比如Controller(取決於)Service(取決於)DAO。 我的目標是單元測試控制器。注入沒有java接口的模擬對象進行單元測試
我創建了Mock服務對象,將它注入Controller類。
谷歌搜索後,我瞭解到,我可以使用java界面來做到這一點。
理想情況下,服務層不需要接口。
我不知道是否有不同的方法來注入模擬對象沒有Java接口。
有像Mockito這樣的模擬庫,可以爲類創建模擬而不需要接口。
MyService serviceMock = org.Mockito.mock(MyService.class);
controller.setService(serviceMock);
如果控制器中的類使用服務類,則可以在單元測試控制器類時模擬服務類,並將其注入控制器類。
public class MyController {
private MyService myService;
public void setMyService(MyService myService) {
this.myservice = myservice;
}
}
無論是模擬接口還是類都取決於控制器類所具有的引用類型。
在上面的例子中,如果MyService
是一個接口,你可以模擬該接口。但如果它是一個班,那麼你必須嘲笑那個班。
希望能夠解決您的疑慮。
謝謝@StefanBirkner。問題解決了。僅供參考:您需要在模擬(..)中傳遞MyService.class。 BTWN我使用@RunWith(MockitoJUnitRunner.class)初始化模擬對象。代碼更清潔。 – Arun
我修正了示例代碼中的錯誤。謝謝@阿倫。 –
因爲它是乾淨的API和這樣的功能,讓我感到困惑的是Mockito不是Java中嘲笑事實上的標準。 –