Подтвердить что ты не робот

Does assertEquals (Object o1, Object o2) использует метод equals

Другими словами, assertEquals работает с классом, который переопределяет equals

4b9b3361

Ответ 1

Из исходного кода метода assertEquals, который вы можете найти в 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().

Edit:

Фрагмент кода исходит из устаревшей версии Junit.

Вы можете прочитать об источнике "нового" Junit здесь. Идея почти такая же, используется метод .equals().

Ответ 2

does assertEquals работает с классом, который переопределяет равные?

Да, assertEquals() вызывает переопределенный equals(), если класс имеет один.

Ответ 3

Да, он вызывает equals и существует отдельный метод assertSame, который использует ==. Чтобы очистить все, assertEquals работает с любым объектом, поскольку все объекты объявляют equals.

Ответ 4

Да, да.

Object m = new Object() {

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

Ответ 5

JUnit - это open source, поэтому вы могли бы найти его в источнике: 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.

Ответ 6

yes - переопределения 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);
  }