验证时JUnit期望失败

时间:2016-05-30 17:27:07

标签: java junit junit4 easymock

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

我的JUnit课程:

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

MyClass的

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方法。虽然员工数量大小相同但对象不同却失败了。任何建议如何处理此问题而不覆盖hashCode类中的equalsEmployee方法。

  java.lang.AssertionError: 
  Unexpected method call ObjectOne.setEmployee([Employee@528c868]):
    ObjectOne.setEmployee([Employee@64c63c79]): expected: 1, actual: 0

3 个答案:

答案 0 :(得分:0)

指定预期行为时:

easymockObject.setEmployee(employeelist);

你隐含地指示EasyMock期望该对象的雇员将被传递给此电话。

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

所以,你能做的就是削弱这种状况,比如

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

现在,EasyMock将接受任何非空列表。

答案 1 :(得分:0)

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

部分

答案 2 :(得分:0)

您也可以使用

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

在断言部分中使用

employeeCapture.getValue()

做断言。