unit-testing - 在方法中模拟对象创建

标签 unit-testing mocking easymock

如果我有以下方法:

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/

相关文章:

java - 单元测试 Presenter 的业务逻辑

python - python mock __init__() 返回伪类的正确方法

javascript - 我如何用 Jest 测试这个功能?

unit-testing - 支持集成测试而不是单元测试是错误的吗?

unit-testing - 为什么将现有测试从 JUnit4 转换为 Junit5?

java - EasyMock:无效方法

java - EasyMock——测试类中的模拟方法?

python - 注入(inject)python类进行测试,无需修改类

java - Mockito spy 如何知道它何时进行 spy Activity ?

java - EasyMock 和 Ibatis