【问题标题】:How to call real method on condition of spied object in Mockito?如何在 Mockito 中的间谍对象条件下调用真实方法?
【发布时间】:2019-03-15 20:21:14
【问题描述】:

我需要能够根据某些条件调用真正的 spy 对象方法。 IE。如果条件为真,则调用真正的方法,否则执行其他操作。

需要明确的是,我需要在第一次调用时抛出异常并在第二次调用时调用真实方法。是否可以通过使用 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();

【问题讨论】:

  • 感谢您提供非常有帮助的答案!爱猫

标签: java mocking mockito spy


【解决方案1】:

简单,使用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());
}

打印:

是的

是啊!

说真的:无论如何,您应该更喜欢when(mock.foo()).then...(请参阅here 了解原因列表)。有几种情况需要使用doReturn().when(),但如前所述:这是你最后的手段,而不是你的首选。

【讨论】:

  • 非常感谢您的回答!这是我需要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多