说Foo
是我们模拟的类,Foo
有一个名为Foo.bar()
的方法,它返回类型Void
(不是void
)。我们如何使用Mockito来模拟这种方法?
不确定在这种情况下返回null
是否是最佳解决方案。
答案 0 :(得分:2)
因为Void is final and not instantiable,所以没有你可以返回的实例。在生产中,该方法只能返回null
(如果它完全返回),并且在测试中也应如此。
请注意,对于返回除集合和原始包装之外的Object实例的方法,Mockito将return null
by default,因此如果需要覆盖spied方法,则只需要存根返回Void的方法:
// Spy would have thrown exception
// or changed object state
doReturn(null).when(yourSpy).someMethodThatReturnsVoid();
或抛出异常:
// Throw instead of returning null by default
when(yourMock.someMethodThatReturnsVoid()).thenThrow(new RuntimeException());
或者回答:
when(yourMock.someMethodThatReturnsVoid()).thenAnswer(new Answer<Void>() {
@Override public void answer(InvocationOnMock invocation) {
// perform some action here
return null;
}
}