我想使用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)));
没有"doInvoke"或类似的东西吗?
在模拟扩展类之前,我必须诉诸标准的Java类扩展和重写吗?
来自文档:
存根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));