assertEquals(Object o1,Object o2)是否使用equals方法

时间:2012-11-28 14:38:48

标签: java junit

换句话说,assertEquals是否适用于覆盖equals的类

6 个答案:

答案 0 :(得分:37)

您可以在source code of the assertEquals method上找到Junit GitHub Repo

/**
 * Asserts that two objects are equal. If they are not
 * an AssertionFailedError is thrown with the given message.
 */
static public void assertEquals(String message, Object expected, Object actual) {
    if (expected == null && actual == null) {
        return;
    }
    if (expected != null && expected.equals(actual)) {
        return;
    }
    failNotEquals(message, expected, actual);
}

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

修改

代码段来自Junit的弃用版本。

您可以阅读有关'新'Junit here的来源。这个想法几乎相同,也使用了.equals()方法。

答案 1 :(得分:7)

  

assertEquals是否适用于覆盖等于的类?

是的,如果班级有assertEquals()equals()会调用被覆盖的{{1}}。

答案 2 :(得分:4)

是的,它会调用equals,并且有一个使用assertSame的单独方法==。只是为了清理,assertEquals适用于任何对象,因为所有对象都声明equals

答案 3 :(得分:2)

是的。

Object m = new Object() {

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

答案 4 :(得分:1)

JUnit是开源的,所以你可以在源代码中自己查找:https://github.com/junit-team/junit4/blob/master/src/main/java/org/junit/Assert.java

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);
}

因此,您可以看到它使用equals。如果您想比较身份,请使用assertSame

答案 5 :(得分:1)

是 - 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);
  }