Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Mockito中,如何在间谍对象的情况下调用real方法?_Java_Mocking_Mockito_Spy - Fatal编程技术网

Java 在Mockito中,如何在间谍对象的情况下调用real方法?

Java 在Mockito中,如何在间谍对象的情况下调用real方法?,java,mocking,mockito,spy,Java,Mocking,Mockito,Spy,我需要能够根据某些条件调用间谍对象的实际方法。也就是说,如果条件为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.c

我需要能够根据某些条件调用间谍对象的实际方法。也就是说,如果条件为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();
简单,当(…)时使用
。然后(…)
,因为这允许模拟规范的“流畅链接”:

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())。然后…
无论如何(请参阅以获取原因列表)。有一些情况下需要使用
doReturn().when()
,但正如所说:这是您的最后手段,而不是您的第一选择。

非常感谢您的回答!这就是我需要的!谢谢你非常有用的回答!爱猫