Mockito测试void方法引发异常

ao218c7q  于 2022-11-08  发布在  其他
关注(0)|答案(3)|浏览(176)

我有一个返回类型为void的方法。它也会抛出一些异常,所以我想测试一下抛出的异常。所有的尝试都失败了,原因都是一样的:
该方法当类型Stubber中的(T)不适用于参数(void)时
你知道如何让这个方法抛出一个指定的异常吗?

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

bnl4lu3b1#

括号的位置不对。
您需要使用:

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

使用:

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

文档中对此进行了说明

b91juud3

b91juud32#

如果您曾经想知道如何使用Mockito的新BDD风格来实现这一点:

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

为了便于将来参考,可能需要抛出异常,然后不执行任何操作:

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

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);
    });

相关问题