Mockito不使用thenThrow引发异常

时间:2018-07-17 06:26:41

标签: java mockito

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

尝试模拟以下代码行

{% for comment in page.object_list %}
<div class='comment-editormd-view'>
    <textarea style="display:none;">
 {{ comment.body }}
    </textarea>
 </div>
{% endfor %}


editormd.markdownToHTML("comment-editormd-view", {
htmlDecode      : "style,script,iframe",  // you can filter tags decode
emoji           : true,
taskList        : true,
lineNumbers     : false,

为了模拟我正在使用

boolean status= accountDAO.updateAccount(Account acct);

但是问题是,当代码到达Mockito.when(accountDAO.updateAccount(Account acct)).thenThrow(new DataBaseException()); 行时,不会引发任何异常,它只是以正常方式工作,而不会引发异常。理想情况下,应该抛出异常,因为我已经嘲笑它引发了数据库异常。

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

boolean status= accountDAO.updateAccount(Account acct);

对于此方法,使用mocikto成功抛出了异常,但对于update方法,则不起作用。

请帮助。

2 个答案:

答案 0 :(得分:3)

假设您的代码如下所示:

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

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

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

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

答案 1 :(得分:1)

首先,这一行

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

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

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

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