当前位置: 首页 > 知识库问答 >
问题:

Mockito测试void方法引发异常

景永春
2023-03-14

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

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

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

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

共有2个答案

东郭和光
2023-03-14

如果您想知道如何使用新的BDD样式的Mockito来实现:

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

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

willThrow(new Exception()).willDoNothing().given(mockedObject).methodReturningVoid(...));
江华容
2023-03-14

括号的位置不好。

您需要使用:

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

而不使用:

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

这在文档中有解释

 类似资料:
  • 问题内容: 我有一个带有返回类型的方法。它还可以引发许多异常,因此我想测试所引发的异常。所有尝试均以相同的原因失败: Stubber类型中的when(T)方法不适用于参数(void) 有什么想法可以获取引发指定异常的方法吗? 问题答案: 括号放置不正确。 您需要使用: 而 不是 使用: 在文档中对此进行了解释

  • 我遇到了问题,有两个不实的方法。在我已经按照这个答案嘲笑了一个数组列表,该数组列表将在for循环中循环,没有嘲笑列表,但传递了一个真实的列表并添加了被嘲笑的对象。 Mockito在这条线上给我一个InvalidUseOfMatchersException 验证(effectList.get(Mockito.anyInt())。执行(playerHandler) 关于这个例外,有很多关于SO的问题,

  • 问题内容: 我有一个充满void方法的Java类,我想进行一些单元测试以获得最大的代码覆盖率。 例如我有这种方法: 它的名字不好用是因为我翻译了代码以更好地理解。每种方法均会验证参数是否在某种程度上有效并且编写正确。 范例: 我的单元测试很好地涵盖了小的方法,因为我要求它们检查ErrorFile是否包含错误消息,但是我看不到如何测试方法checkIfValidElements,它什么也不返回或什么

  • 当方法运行时,我希望抛出一个异常(在测试时)。我能做的事情很少: 存根(mock.someMethod(“某些参数”)).ToThrow(new RuntimeException()); 当(mock.someMethod(“某些参数”)).thenThrow(new RuntimeException()) 放弃..... 通常我会创建一个spy对象来调用spied方法。使用stubbing我可以

  • 我应该如何测试异常?我可以mock connector并且我可以赋予它抛出异常的行为,但是我不明白下一步该怎么做。