2017-07-15 125 views
1

我想模擬方法createInstanceB使用Mockito.when以及doReturn()。這總是要求真正的方法。 例如:Mockito嘲笑一種方法調用實際方法

Class A{ 
public B createInstanceB(any,any){ 
B b= new B(); 
b.api(); 
} 
} 

我使用下面我進口 進口org.mockito.Mockito; import static org.mockito.Mockito。*;

Class ATest{ 
A a ; 
B b; 
@Before 
Public void setup{ 
    a= A.getInstance(); 
    b= mock(B.class); 
} 
@Test 
public void testCreateInstanceB(){ 
Mockito.when(a.createInstanceB(any(),any()).thenreturn(b); 
... 
} 

嘗試doReturn(模擬)以及。 任何幫助,在此表示讚賞。

+0

發佈一個完整的重現問題的最小示例。沒有看到您的代碼,我們無法分辨您的代碼錯誤。 –

+0

更新 - JB Nizet – user3754993

+1

您發佈的代碼不是有效的Java代碼。正如你正確的答案所說:你試圖嘲笑一個不是模擬的對象的方法。這是行不通的。 –

回答

2

代碼的問題在於它調用Mockito.when()的實際實例A,而不是模擬。 Mockito.when()只適用於模擬對象,而不是真實的東西。

如果您需要在「真實」對象上「嘲笑」(殘留)方法,請考慮使用Mockito.spy()。有關使用「間諜」的更多信息,see this post

像這樣的事情會接近你想要什麼:

Class ATest{ 
A a ; 
A aSpy; 
B b; 

@Before 
Public void setup{ 
    a= A.getInstance(); 
    aSpy = Mockito.spy(a); 
    b= mock(B.class); 
} 

@Test 
public void testCreateInstanceB(){ 
Mockito.when(aSpy.createInstanceB(any(),any()).thenreturn(b); 
... 
} 

您需要在您的測試代碼中使用aSpy,不a