我有一个返回类型为void的方法。它也会抛出一些异常,所以我想测试一下抛出的异常。所有的尝试都失败了,原因都是一样的:该方法当类型Stubber中的(T)不适用于参数(void)时你知道如何让这个方法抛出一个指定的异常吗?
void
doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
bnl4lu3b1#
括号的位置不对。您需要使用:
doThrow(new Exception()).when(mockedObject).methodReturningVoid(...); ^
和不使用:
doThrow(new Exception()).when(mockedObject.methodReturningVoid(...)); ^
文档中对此进行了说明
b91juud32#
如果您曾经想知道如何使用Mockito的新BDD风格来实现这一点:
willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));
为了便于将来参考,可能需要抛出异常,然后不执行任何操作:
willThrow(new Exception()).willDoNothing().given(mockedObject).methodReturningVoid(...));
3xiyfsfu3#
您可以尝试以下操作:
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); });
3条答案
按热度按时间bnl4lu3b1#
括号的位置不对。
您需要使用:
和不使用:
文档中对此进行了说明
b91juud32#
如果您曾经想知道如何使用Mockito的新BDD风格来实现这一点:
为了便于将来参考,可能需要抛出异常,然后不执行任何操作:
3xiyfsfu3#
您可以尝试以下操作:
在我的例子中,我想为try块抛出一个显式异常,我的方法块如下所示
我已经涵盖了所有上述声纳覆盖的例外情况,如下所示