繁体   English   中英

在Mockito中如何在间谍对象条件下调用真实方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM