4

如果我有以下方法:

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

3 回答 3

3

User您是正确的,因为预期和实际调用之间的对象不同,所以抛出了意外的方法调用getPhone

正如@laurence-gonsalves 在评论中提到的那样,如果User有一个有用的equals方法,你可以EasyMock.eq(mockUser)在预期的调用中使用getPhone它应该检查两个User对象是否相等。

查看EasyMock 文档,特别是在“使用参数匹配器的灵活期望”部分。

于 2010-09-22T09:19:50.740 回答
1

您可以使用

EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject())).andReturn(new Phone());

我认为这应该可以解决您的问题。

于 2013-04-16T06:32:17.450 回答
0

Yeswanth Devisetty给出的答案略有变化

EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject(User.class))).andReturn(new Phone());

这将解决问题。

于 2014-12-09T11:44:14.107 回答