使用Mockito,如何使用返回类型void存储一个方法,该方法在传递某个参数时会抛出异常?

时间:2013-03-28 13:06:22

标签: java unit-testing junit mockito

以下是stubbing void methods with exceptions的主要 Mockito 文档。但是,Mockito doc中的示例存根无参数方法。 如果方法有参数怎么办?如果a参数不符合合同,该方法会抛出异常

所以对于下面的课程......

public class UserAccountManager {    
   /**
    * @throws Exception if user with provided username already exists
    */
    public void createAccount(User user) throws Exception {
        // db access code ...
    }
}

...如何使用 Mockito 模拟 UserAccountManager.createAccount ,以便抛出异常,如果某个用户对象传递作为方法的参数?

1 个答案:

答案 0 :(得分:10)

Mockito doc已经显示了如何使用异常存储无参数 void方法的示例。

但是,对于使用参数和例外来存根空方法,请执行以下操作:

由于返回类型的createAccount无效,您必须使用doThrow

User existingUser = ... // Construct a user which is supposed to exist
UserAccountManager accountMng = mock(UserAccountManager.class);    

doThrow(new Exception()).when(accountMng).createAccount(eq(existingUser));

请注意eq匹配器的用法。如果参数的类型(在本例中为User)没有自己实现 equals ,您也可以尝试使用refEq匹配器。