假设Foo
是我们模拟的类,Foo
有一个名为Foo.bar()
的方法,它返回类型Void
(不是void
(。我们如何用Mockito来模拟这种方法?
不确定在这种情况下返回null
是否是最佳解决方案。
因为 Void 是最终的,不可实例化,所以你永远无法返回任何实例。在生产中,该方法只能返回null
(如果它返回的话(,这在测试中也应该成立。
请注意,默认情况下,对于返回集合和基元包装器以外的 Object 实例的方法,Mockito 将返回 null
,因此,如果您需要重写监视方法,则只需存根返回 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;
}
}