[英]How to call real method on condition of spied object in Mockito?
我需要能够根据某种条件调用间谍对象的真实方法。 即,如果条件为true,则调用real方法,否则执行其他操作。
为了清楚起见,我需要在第一次调用时引发异常,并在第二次调用时调用real方法。 使用Mockito是否可以实现?
Object object = Mockito.spy(new Object());
// On the first call I need to throw an exception like this
Mockito.doThrow(RuntimeException.class).when(object).toString();
// On the second call I need to call a real method
Mockito.doCallRealMethod().when(object).toString();
容易,使用when(...).then(...)
,因为它允许模拟规范的“流畅链接”:
Object object = Mockito.spy(new Object());
Mockito.when(object.toString()).thenThrow(new RuntimeException()).thenReturn("yeha");
try {
System.out.println(object.toString());
fail();
} catch(RuntimeException r) {
System.out.println(object.toString());
}
打印:
YEHA
耶哈!
认真地说:无论如何,您应该更喜欢when(mock.foo()).then...
(请参阅此处,了解为什么这样做的原因)。 在某些情况下,需要使用doReturn().when()
,但是doReturn().when()
:这是您的最后选择,而不是您的第一选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.