2013-06-20 42 views
25

我有一個有2種方法的類。我想嘲笑課程,然後嘲笑第一種方法,但不是第二種方法。Mockito-調用真正的方法

例如

class C { 
void m1() { ...} 
boolean m2() { ... return flag;} 
}  

單元測試代碼:

C cMock = Mockito.mock(C.class); 
Mockito.doNothing().when(cMock).m1(); 
Mockito.when(cMock.m2()).thenCallRealMethod(); 

奇怪的是,M2不會被調用。

我想念這裏的一切嗎?

+1

是你的實際C類非最終?此外,作爲替代方案,您可以創建一個Spy而不是Mock,然後您只需爲m1執行'doNothing()'。 –

+2

你可以給我們整個單元測試代碼嗎?因爲在這裏,如果m2沒有被調用,那很正常。你只是宣佈模擬的行爲。但是沒有真正的方法被調用。 – LaurentG

+0

@凱文。是的,它不是最終的。間諜工作! –

回答

4

缺少呼叫: cMock.m2();

35

這也是可以使用Mockito.spy的地方。它允許你對真實物體進行部分模擬。

C cMock = Mockito.spy(new C()); 
Mockito.doNothing().when(cMock).m1(); 
相關問題