Mockito-调用真实方法

37
我有一个类,其中有2个方法。我想模拟这个类,然后只模拟第一个方法而不是第二个方法。
例如:
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是非final的吗?此外,作为一种替代方案,您可以制作一个Spy而不是Mock,然后您只需要对m1执行doNothing() - Kevin Welker
3
你能给我们整个单元测试的代码吗?因为在这里,如果m2没有被调用是正常的。你只是声明了mocks的行为,但没有真正的方法被调用。 - LaurentG
@Kevin。是的,它还不是最终版。Spy 工作正常! - Java Spring Coder
@LaurentG,我错过了cMock.m2()的调用。现在它也可以工作了。 - Java Spring Coder
2个回答

44

这也是 Mockito.spy 可以用于的地方,它允许您对真实对象进行部分模拟。

C cMock = Mockito.spy(new C());
Mockito.doNothing().when(cMock).m1();

7
缺少调用: cMock.m2();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接