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,也要遵守这两个契约。