mock测试void方法会抛出异常

我有一个返回类型为void的方法。它还可以抛出一些异常,所以我想测试那些被抛出的异常。所有的尝试都失败了,原因都一样

Stubber类型中的(T)不适用于参数(void)时的方法。

有什么想法,我可以让方法抛出一个指定的异常?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
425229 次浏览

括号放得不好。

你需要使用:

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
^

使用:

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
^

这在的文档中有解释

如果你想知道如何使用Mockito的新BDD风格:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

为了便于将来参考,可能需要抛出异常,然后什么都不做:

willThrow(new Exception()).willDoNothing().given(mockedObject).methodReturningVoid(...));

你可以试试下面的方法:

 given(class.method()).willAnswer(invocation -> {
throw new ExceptionClassName();
});
    

在我的例子中,我想为一个try块抛出一个显式异常,我的方法块如下所示

     public boolean methodName(param) throws SomeException{
    

try(FileOutputStream out = new FileOutputStream(param.getOutputFile())) {
//some implementation
} catch (IOException ioException) {
throw new SomeException(ioException.getMessage());
} catch (SomeException someException) {
throw new SomeException (someException.getMessage());
} catch (SomeOtherException someOtherException) {
throw new SomeException (someOtherException.getMessage());
}
return true;
}

我已经涵盖了声纳覆盖的所有例外,如下所示

   given(new FileOutputStream(fileInfo.getOutputFile())).willAnswer(invocation -> {
throw new IOException();
});
Assertions.assertThrows(SomeException.class, () ->
{
ClassName.methodName(param);
});