在方法中创建模拟对象

时间:2010-09-21 22:48:58

标签: unit-testing mocking easymock

如果我有以下方法:

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());

3 个答案:

答案 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());

这将解决问题。