如果我有以下方法:
public void handleUser(String user) {
User user = new User("Bob");
Phone phone = userDao.getPhone(user);
//something else
}
当我使用EasyMock对模拟进行测试时,无论如何我可以测试User参数,我将这个传递到我的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());
答案 0 :(得分:3)
您是正确的,因为User
对象在getPhone
的预期和实际调用之间不同,因此抛出了意外的方法调用。
正如@ laurence-gonsalves在评论中提到的,如果User
有一个有用的equals
方法,您可以在EasyMock.eq(mockUser)
的预期调用中使用getPhone
两个User
对象是相等的。
查看EasyMock Documentation,特别是“使用参数匹配器的灵活期望”一节。
答案 1 :(得分:1)
您可以使用
EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject())).andReturn(new Phone());
我认为这可以解决你的问题。
答案 2 :(得分:0)
Yeswanth Devisetty给出的答案略有变化
EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject(User.class))).andReturn(new Phone());
这将解决问题。