我想使用Mockito覆盖类的单个void方法的实现。其他方法应该是存根的。
我尝试了类似的东西,但是自java.lang.Void != void
以来它没有编译:
MyObj obj = mock(MyObj.class);
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
return null;
}
}).when(obj.myMethod(any(String.class)));
没有&#34; doInvoke&#34;或类似的东西?
在模拟扩展类之前,我是否必须使用标准的Java类extend-and-override? p>
答案 0 :(得分:2)
Stubbing void需要与when(Object)不同的方法,因为编译器不喜欢括号内的void方法...
doThrow(Throwable)
替换stubVoid(Object)
方法来存留空洞。主要原因是提高了doAnswer()
方法系列的可读性和一致性。对于任何方法,您都可以使用
时有必要doThrow()
,doAnswer()
,doNothing()
,doReturn()
和doCallRealMethod()
代替与when()相对应的调用。
- stub void methods
- 间谍对象的存根方法(见下文)
- 多次使用相同的方法,在测试过程中更改模拟的行为。
但是对于所有的存根调用,您可能更愿意使用这些方法代替when()的替代方法。
所以听起来你只是想要:
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocationOnMock) throws Throwable {
return null;
}
}).when(obj).myMethod(any(String.class));