2013-06-20 40 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(); 
相关问题