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

Mockito未使用thenThrow引发异常

尤俊誉
2023-03-14

我正在使用Mockito来模拟服务层的方法。

试图嘲笑以下代码行

boolean status= accountDAO.updateAccount(Account acct);

为了嘲笑我正在使用的这个

Mockito.when(accountDAO.updateAccount(Account acct)).thenThrow(new DataBaseException());

但问题是当代码到达行布尔状态=accountDAO时。更新账户(Account acct) ,不会引发异常,它只按正常方式工作,不会引发异常。理想情况下应该抛出一个异常,因为我已经模拟它来抛出数据库异常。

而另一种方法是“查找帐户”,即

Account acc=accountDAO.find(Account.class,accountId);

对于此方法,使用mocikto成功引发异常,但对于update方法,它不起作用。

请帮忙。


共有2个答案

诸葛雨泽
2023-03-14

首先,这条线

Mockito.when(accountDAO.updateAccount(Account acct)).thenThrow(new DataBaseException());

不应编译。您必须指定一些值作为调用的参数,例如:

Mockito.when(accountDAO.updateAccount(Mockito.any(Account.class))).thenThrow(new DataBaseException());

这意味着“当使用任何帐户参数调用updateUser()时,然后抛出”。

顾鸣
2023-03-14

假设您的代码如下所示:

Account acct = ...
Mockito.when(accountDAO.updateAccount(acct)).thenThrow(new DataBaseException());

如果您仅使用Account acct执行上述方法,这将引发异常,其他对象不会抛出任何东西。因此,如果您使用不同的对象执行此方法,则不会发生任何事情。

要检查这一点,您可以定义一个规则,即此方法的任何执行,以及帐户的任何实例都将引发异常:

 Mockito.when(accountDAO.updateAccount(Mockito.any(Account.class))).thenThrow(new DataBaseException());
 类似资料:
  • 我在测试跟随功能。 下面是测试代码。 我定义了以下变量。 问题是不会引发异常。所以测试一直失败。 请告诉我我缺少的东西。

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

  • 是否可以在使用非预定义参数调用模拟时引发异常?有答案。返回\u SMART\u null,但这并不是我真正需要的,因为如果null是合法的返回值,它就不起作用,这不会导致NullPointerException,而是以后出错。 编辑:一些背景。因此,在Mockito中,当您定义一个mock时,您可以如下所示为每个调用指定返回值: 当<代码>myMock时。someMethod是用参数调用的,我在测

  • 我正在使用Mockit。我遇到过这样的情况:一个方法抛出一个异常,捕捉该异常并记录该异常(并且不重新抛出)。 现在,对于某些场景,xyz()可以引发异常,该异常在abc()中捕获。我要测试的就是这个场景。我无法使用,因为正在捕获并记录异常。然而,我的测试用例应该看看是否引发了这个异常。 我确实在网上搜索过,但是没有找到任何相关的东西。 任何关于如何接近的指针都会很有帮助。 我提到这个问题,看起来很

  • 我正在尝试使用@Valid验证我的JPA实体,如下所示: 它工作了一段时间,但现在它停止工作,我不知道为什么。我试着在< code>persist方法中手动执行,它按预期工作: 可能会发生什么情况,或者我该如何调试?

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