如果我有以下方法:
public void handleUser(String user) {
User user = new User("Bob");
Phone phone = userDao.getPhone(user);
//something else
}
当我使用 EasyMock 用模拟测试这个时,无论如何我可以测试我传递给我的 UserDao 模拟的用户参数,如下所示:
User user = new User("Bob");
EasyMock.expect(userDaoMock.getPhone(user)).andReturn(new Phone());
当我尝试运行上述测试时,它提示我认为意外的方法调用是因为在方法中创建的实际用户与我传入的用户不同......我是否正确?
或者是我可以测试传递给 UserDao 的参数的最严格的方法是:
EasyMock.expect(userDaoMock.getPhone(EasyMock.isA(User.class))).andReturn(new Phone());
最佳答案
您是正确的,因为 User
正在抛出意外的方法调用对 getPhone
的预期调用和实际调用之间的对象不同.
正如@laurence-gonsalves 在评论中提到的,如果 User
有一个有用的equals
方法,你可以使用 EasyMock.eq(mockUser)
在对 getPhone
的预期调用中这应该检查它两个 User
对象相等。
看看 EasyMock Documentation ,特别是在“带有参数匹配器的灵活期望”部分。
关于unit-testing - 在方法中模拟对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765066/