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
不会覆盖 hashCode
和 equals
方法。尽管员工人数相同,但对象不同,所以失败了。关于如何在不覆盖 Employee
class.
中的 hashCode
和 equals
方法的情况下处理此问题的任何建议
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()
做断言。
我正在尝试使用 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
不会覆盖 hashCode
和 equals
方法。尽管员工人数相同,但对象不同,所以失败了。关于如何在不覆盖 Employee
class.
hashCode
和 equals
方法的情况下处理此问题的任何建议
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()
做断言。