5

这是stubbing void methods with exceptions的主要Mockito文档。但是,Mockito 文档中的示例存根了无参数方法。如果方法有参数,如果 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以便在某个 User 对象作为参数传递给该方法时抛出异常?

4

1 回答 1

10

Mockito文档已经展示了如何使用异常存根无参数void 方法的示例。

但是,要使用参数和异常来存根 void 方法,请执行以下操作:

由于createAccount 的返回类型是 void,因此您必须使用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匹配器。

于 2013-03-28T13:06:22.143 回答