57

言い換えると、assertEqualsはオーバーライドするクラスで機能しますかequals

4

7 に答える 7

52

Junit GitHubリポジトリにあるassertEqualsメソッドのソースコードから:

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

.equals()Junitがメソッドを使用していることがわかります。

編集:

コードスニペットは、非推奨バージョンのJunitからのものです。

'new'Junitのソースについてはここで読むことができます。考え方はほとんど同じで、.equals()方法も使用されます。

于 2012-11-28T14:42:43.447 に答える
7

assertEqualsは、equalsをオーバーライドするクラスで機能しますか?

はい、クラスにオーバーライドがある場合assertEquals()は、オーバーライドを呼び出します。equals()

于 2012-11-28T14:41:34.637 に答える
4

はい、それは呼び出します、そして、を使用equalsする別のメソッド、があります。すべてのオブジェクトがを宣言しているので、物事を片付けるために、任意のオブジェクトで動作します。assertSame==assertEqualsequals

于 2012-11-28T14:42:23.200 に答える
2

はい、そうです。

Object m = new Object() {

    @Override
    public boolean equals(Object obj) {
        System.out.println("proof!");
        return super.equals(obj);
    }
};
Assert.assertEquals(m, m);
于 2012-11-28T14:41:49.303 に答える
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。ID を比較する場合は、 を使用しますassertSame

于 2012-11-28T14:44:59.433 に答える
1

はい - TestNG は equals をオーバーライドします -

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);
  }
于 2014-11-10T09:55:41.580 に答える