Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 如何在返回void并引发异常的方法上doThrow或thenThrow_Java_Mockito - Fatal编程技术网

Java 如何在返回void并引发异常的方法上doThrow或thenThrow

Java 如何在返回void并引发异常的方法上doThrow或thenThrow,java,mockito,Java,Mockito,我有一个方法process,它返回void,还可能抛出异常。我想验证调用process时其他方法如何运行,以及在异常发生时如何处理 我尝试使用doThrow(),但它告诉我“选中的异常对此方法无效!”。然后我尝试使用thenthow(),但它需要一个notvoid函数 代码: 测试: 我希望测试会成功。这是告诉模拟抛出异常的正确方法: Mockito.doThrow(new SomeException()).when(mock).doSomething() 正如Hulk在评论中所述,此异常需要

我有一个方法
process
,它返回void,还可能抛出异常。我想验证调用
process
时其他方法
如何运行
,以及在异常发生时如何处理

我尝试使用
doThrow()
,但它告诉我“选中的异常对此方法无效!”。然后我尝试使用
thenthow()
,但它需要一个notvoid函数

代码:

测试:


我希望测试会成功。

这是告诉模拟抛出异常的正确方法:

Mockito.doThrow(new SomeException()).when(mock).doSomething()
正如Hulk在评论中所述,此异常需要与方法签名匹配,否则,您将得到一个
MockitoException(“选中的异常对此方法无效!”)


您可以通过抛出某种类型的
RuntimeException
来绕过该异常。最后,应尽量避免使用泛型
异常
。抛出适当的命名异常要有用得多

可能的重复听起来不太可能。我的猜测是,您对共享的代码过于简化,而您真正使用的代码是不同的。使用您在那里显示的代码,您将不会得到您所描述的结果。您应该显示实际使用的代码,而不是其他代码。
doThrow
确实适用于已检查的异常,但您需要根据方法签名抛出正确类型的异常。如果未声明任何选中的异常,请抛出
RuntimeException
,而不是
Exception
@hulk,谢谢。成功了!
var billet1 = new Billet();
var billet2 = new Billet();

doThrow(new Exception()).when(myInctance).process(billet2);
myInctance.run();
assertEquals("processed", billet1.status);
assertEquals("error", billet2.status);

// ... some checks ...
Mockito.doThrow(new SomeException()).when(mock).doSomething()