我正在尝试使用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
未覆盖hashCode
和equals
方法。虽然员工数量大小相同但对象不同却失败了。任何建议如何处理此问题而不覆盖hashCode
类中的equals
和Employee
方法。
java.lang.AssertionError:
Unexpected method call ObjectOne.setEmployee([Employee@528c868]):
ObjectOne.setEmployee([Employee@64c63c79]): expected: 1, actual: 0
答案 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()
做断言。