【发布时间】:2016-05-29 15:13:48
【问题描述】:
我了解 Mockito.verify() 用于确保使用所需参数调用模拟方法。但我不明白这样做的意图。我经常看到类似这样的测试:
public class UserDAO {
public long create(User user) {
//...
}
}
public class UserService {
private UserDAO userDAO;
public UserService(UserDAO userDAO) {
this.userDAO = userDAO;
}
public long createUser(User user) {
return userDAO.create(user);
}
}
public class UserServiceTest {
@Test
public void testCreateUser() {
UserDAO userDAO = mock(UserDAO.class);
when(userDAO.create(any(User.class))).thenReturn(anyLong());
UserService = new UserService(userDAO);
User user = new User("John Smith");
userService.createUser(user);
verify(userDAO).create(user);
}
}
测试验证 UserDAO 的 create 方法在 UserService 的 createUser 方法被调用时被调用。看起来很荒谬。如果我以不调用 UserDAO 方法的方式更改 UserService 的实现,即使实现正确,我的测试也会失败。
我承认,在某些情况下,可能需要验证该方法被调用的确切次数,但这种情况并不常见。
我很可能不理解 verify 的概念,而且它不是 mockito 特有的功能。你能用简单的话解释一下,什么时候使用它真的有意义。
【问题讨论】:
标签: unit-testing mocking mockito