JUnit 期望验证失败

JUnit expectation failure on verify

我正在尝试使用 EasyMock 进行 JUnit 测试。我在 setter 行中遇到断言错误,其中参数是从另一个私有方法填充的。下面是代码和 JUnit 失败错误。

我的 JUnit class:

private EasyMockSupport easyMockSupport = new EasyMockSupport();
private ObjectOne easymockObject= easyMockSupport.createMock(ObjectOne .class);
// creating employeelist
easymockObject.setEmployee(employeelist);

我的班级

ObjectOne methodOne(ObjectOne obj, List<Employee> employeeList) {

    obj.setEmployee(getEmployeeList(employeeList));
    return obj;
}

private List<Employee> getEmployeeList(List<Employee> employeeList) {

    Employee emp = null;
    for (Employee employee: employeeList) {
        if ("somename".equalsIgnoreCase(employee.getName())) {
            emp = new Employee();
            emp.setName(employee.getName());
            break;
        }
    }
    return emp;
}

我收到以下行的断言错误:

obj.setEmployee(getEmployeeList(employeeList)); 

因为 Employee 不会覆盖 hashCodeequals 方法。尽管员工人数相同,但对象不同,所以失败了。关于如何在不覆盖 Employee class.

中的 hashCodeequals 方法的情况下处理此问题的任何建议
  java.lang.AssertionError: 
  Unexpected method call ObjectOne.setEmployee([Employee@528c868]):
    ObjectOne.setEmployee([Employee@64c63c79]): expected: 1, actual: 0

当您指定预期行为时:

easymockObject.setEmployee(employeelist);

您隐式地指示 EasyMock 期望将那个对象 employeelist 传递给此调用。

但显然,您的生产代码正在将 一些 其他列表传递给 ObjectOne。

所以,你可以做的就是削弱这种情况,比如

easymockObject.setEmployee(EasyMock.notNull(List.class))

现在 EasyMock 将接受任何要传递的非空列表。

我从这个 link http://easymock.org/user-guide.html#verification 得到了答案。我们必须使用参数匹配器来处理这个问题。在此 link 中,请参阅 带有参数匹配器的灵活期望

部分

你也可以使用

Capture<List<Employee>> employeeCapture = new Capture<>();
easymockObject.setEmployee(capture(employeeCapture));

在断言部分使用

employeeCapture.getValue()

做断言。