当前位置: 首页 > 面试题库 >

Mockito测试void方法会引发异常

易雅畅
2023-03-14
问题内容

我有一个带有void返回类型的方法。它还可以引发许多异常,因此我想测试所引发的异常。所有尝试均以相同的原因失败:

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

有什么想法可以获取引发指定异常的方法吗?

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

问题答案:

括号放置不正确。

您需要使用:

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

不是 使用:

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

在文档中对此进行了解释



 类似资料:
  • 我有一个返回类型为的方法。它还可以抛出许多异常,所以我想测试一下那些被抛出的异常。所有尝试都失败了,原因相同: 类型Stubber中的(T)不适用于参数(void)时的方法 有什么想法,我可以如何获得方法抛出一个指定的异常?

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

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

  • 为什么我不能在Mammal对象中抛出异常,并在创建该对象的Test类中捕获它? 我试图捕获由teDamage方法抛出的异常,但我得到:异常TakeDamageException永远不会抛出在相应的try语句的正文中 和:未报告的异常TakeDamageException;必须被捕获或声明为抛出mammal.take损害(-123); 将我的异常类定义为:

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