Java assertEquals(对象o1,对象o2)是否使用equals方法

Java assertEquals(对象o1,对象o2)是否使用equals方法,java,junit,Java,Junit,换句话说,assertEquals是否与重写等于的类一起工作 assertEquals是否与重写equals的类一起工作 是,assertEquals()调用重写的equals(),如果类有一个。是的 Object m = new Object() { @Override public boolean equals(Object obj) { System.out.println("proof!"); return super.equals(ob

换句话说,assertEquals是否与重写
等于的类一起工作

assertEquals是否与重写equals的类一起工作

是,
assertEquals()
调用重写的
equals()
,如果类有一个。

是的

Object m = new Object() {

    @Override
    public boolean equals(Object obj) {
        System.out.println("proof!");
        return super.equals(obj);
    }
};
Assert.assertEquals(m, m);

是的,它调用
equals
,还有一个单独的方法,
assertSame
,它使用
=
。为了澄清问题,
assertEquals
适用于任何对象,因为所有对象都声明
等于

,您可以在上找到:

您可以看到Junit正在使用
.equals()
方法

编辑:

代码段来自一个不推荐使用的Junit版本


您可以阅读“新”Junit的源代码。想法基本相同,也使用了
.equals()
方法

JUnit是开源的,因此您可以自己在源代码中查找它:


如您所见,它使用
等于
。如果要比较标识,请使用
assertSame

是-TestNG覆盖等于-

static public void assertEquals(Object actual, Object expected, String message) {
    if((expected == null) && (actual == null)) {
      return;
    }
    if(expected != null) {
      if (expected.getClass().isArray()) {
        assertArrayEquals(actual, expected, message);
        return;
      } else if (expected.equals(actual)) {
        return;
      }
    }
    failNotEquals(actual, expected, message);
  }

我的问题是JUnit说相等的对象并不相等。结果证明我没有正确地覆盖
对象.equals
。)将
@Override
注释添加到方法中有助于确保您确实正确地进行了重写。谢谢,我也遇到了同样的问题,没有意识到参数必须是类对象。
static public void assertEquals(String message, Object expected,
        Object actual) {
    if (equalsRegardingNull(expected, actual)) {
        return;
    } else if (expected instanceof String && actual instanceof String) {
        String cleanMessage = message == null ? "" : message;
        throw new ComparisonFailure(cleanMessage, (String) expected,
                (String) actual);
    } else {
        failNotEquals(message, expected, actual);
    }
}

private static boolean equalsRegardingNull(Object expected, Object actual) {
    if (expected == null) {
        return actual == null;
    }

    return isEquals(expected, actual);
}

private static boolean isEquals(Object expected, Object actual) {
    return expected.equals(actual);
}
static public void assertEquals(Object actual, Object expected, String message) {
    if((expected == null) && (actual == null)) {
      return;
    }
    if(expected != null) {
      if (expected.getClass().isArray()) {
        assertArrayEquals(actual, expected, message);
        return;
      } else if (expected.equals(actual)) {
        return;
      }
    }
    failNotEquals(actual, expected, message);
  }