以下是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 ,以便抛出异常,如果某个用户对象传递作为方法的参数?
答案 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匹配器。