首页 > 解决方案 > Mockito 不使用 thenThrow 抛出异常

问题描述

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

试图模拟以下代码行

boolean status= accountDAO.updateAccount(Account acct);

为了模拟这个我正在使用

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

但问题是,当代码进入该行时boolean status= accountDAO.updateAccount(Account acct);,没有抛出异常,它只是以正常方式工作,没有抛出异常。理想情况下应该抛出一个异常,因为我已经模拟它抛出数据库异常。

虽然还有另一种方法“查找帐户”,即

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

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

请帮忙。

标签: javamockito

解决方案


假设您的代码如下所示:

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

如果您仅使用 执行上述方法,这将抛出异常Account acct,其他对象不会抛出任何东西。所以如果你用不同的对象执行这个方法,什么都不会发生。

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

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

推荐阅读