2013-11-20 44 views
2

我的java項目有多層,比如Controller(取決於)Service(取決於)DAO。 我的目標是單元測試控制器。注入沒有java接口的模擬對象進行單元測試

我創建了Mock服務對象,將它注入Controller類。

谷歌搜索後,我瞭解到,我可以使用java界面來做到這一點。

理想情況下,服務層不需要接口。

我不知道是否有不同的方法來注入模擬對象沒有Java接口。

回答

3

有像Mockito這樣的模擬庫,可以爲類創建模擬而不需要接口。

MyService serviceMock = org.Mockito.mock(MyService.class); 
controller.setService(serviceMock); 
+0

謝謝@StefanBirkner。問題解決了。僅供參考:您需要在模擬(..)中傳遞MyService.class。 BTWN我使用@RunWith(MockitoJUnitRunner.class)初始化模擬對象。代碼更清潔。 – Arun

+0

我修正了示例代碼中的錯誤。謝謝@阿倫。 –

+0

因爲它是乾淨的API和這樣的功能,讓我感到困惑的是Mockito不是Java中嘲笑事實上的標準。 –

1

如果控制器中的類使用服務類,則可以在單元測試控制器類時模擬服務類,並將其注入控制器類。

public class MyController { 
    private MyService myService; 

    public void setMyService(MyService myService) { 
     this.myservice = myservice; 
    } 
} 

無論是模擬接口還是類都取決於控制器類所具有的引用類型。

在上面的例子中,如果MyService是一個接口,你可以模擬該接口。但如果它是一個班,那麼你必須嘲笑那個班。

希望能夠解決您的疑慮。