2017-07-15 89 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