java中junit测试中的断言错误
伙计们,我有这项服务java中junit测试中的断言错误,java,junit,Java,Junit,伙计们,我有这项服务 public class DepartmentServiceImpl implements DepartmentService { @Autowired private DepartmentDao departmentDao; //... other functions @Override public Department getDepartment(int depid) { return department
public class DepartmentServiceImpl implements DepartmentService {
@Autowired
private DepartmentDao departmentDao;
//... other functions
@Override
public Department getDepartment(int depid) {
return departmentDao.getDepartment(depid);
}
}
我的测试单元是
Department department = new Department();
@Autowired
private DepartmentDao myDao;
@Autowired
private DepartmentService service;
@Test
public void testGetDepartment(){
department.setDepId(111);
department.setDepName("merna");
assertEquals(department, service.getDepartment(111));
}
但它给了我
java.lang.AssertionError: expected:<com.dineshonjava.model.Department@f9b5552> but was:<com.dineshonjava.model.Department@4d4960c8>
java.lang.AssertionError:应为:但为:
有什么帮助吗?您试图断言两个不同的java对象,它们在逻辑上是相同的,一个是您创建的,另一个是由服务返回的 正如某人在评论中所说,您需要重写equal方法,并提供逻辑,说明这两个对象在什么基础上是相等的。在你们的情况下,我猜两个不同的部门对象是相等的,如果他们有相同的部门ID。这个逻辑应该存在于Department.java的equals方法中,以便assertEqual工作 或者,如果不想这样做,可以检查特定的基本体值,而不是整个对象比较
@Test
public void testGetDepartment(){
department.setDepId(111);
department.setDepName("merna");
assertEquals(department.getDepName(), service.getDepartment(111).getDepName());
}
但这是假设您在测试用例中输入的值与DB(或从任何地方)返回的值相同。您试图断言两个不同的java对象,它们在逻辑上是相同的,一个是您创建的,另一个是由服务返回的 正如某人在评论中所说,您需要重写equal方法,并提供逻辑,说明这两个对象在什么基础上是相等的。在你们的情况下,我猜两个不同的部门对象是相等的,如果他们有相同的部门ID。这个逻辑应该存在于Department.java的equals方法中,以便assertEqual工作 或者,如果不想这样做,可以检查特定的基本体值,而不是整个对象比较
@Test
public void testGetDepartment(){
department.setDepId(111);
department.setDepName("merna");
assertEquals(department.getDepName(), service.getDepartment(111).getDepName());
}
但这是假设您在测试用例中输入的值与DB(或从任何地方)返回的值相同。您应该重写Department类中的equals方法:
public boolean equals(Object object) {
if(object == null) {
return false;
}
if(this == object) {
return true;
}
Department otherDepartment = (Department) object;
if(this.getDepId() == otherDepartment.getDepId()) {
return true;
} else {
return false;
}
}
您应该重写Department类中的equals方法:
public boolean equals(Object object) {
if(object == null) {
return false;
}
if(this == object) {
return true;
}
Department otherDepartment = (Department) object;
if(this.getDepId() == otherDepartment.getDepId()) {
return true;
} else {
return false;
}
}
您的
部门
类是否覆盖了equals()
?并不是因为它们具有相同的ID,所以对象是相等的。覆盖equals,不要忘记覆盖hashcode也要考虑这两个契约。您的部门
类是否覆盖equals()
?并不是因为它们具有相同的ID,对象才是相等的。重写equals,并且不要忘记重写hashcode,也要遵守这两个契约。