#java #junit
У меня тест в конце которого проверка двух объектов на равенство: assertThat(result, is(proposal1)); И мне падает ошибка хотя Expected и Actual в логе показаны одинаковыми: java.lang.AssertionError: Expected: isbut: was Expected :is Actual : Разве два объекта с одинаковым состояние не должны проходить assertThat??? Как мне это поправить?
Ответы
Ответ 1
Для того, чтобы объекты корректно сравнивались на равенство нужно переопределить метод Object.equals и реализовать логику сравнения по нужным полям. Если equals не переопределен, то будет использоваться реализация по умолчанию в который равными считаются только ссылки на один и тот же объект. Совпадение значений полей роли не играет. Из документации: The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true). Если equals переопределен, то нужно искать ошибку в реализации метода. UPDATE (по JUnit): Junit также не выполняет сверку полей в данном случае: assertThat обращается к переданному matcher-у, в данном случае is Asserts that actual satisfies the condition specified by matcher. is обращается к equalTo: A shortcut to the frequently used is(equalTo(x)). equalTo использует equals с предпроверкой на null: Creates a matcher that matches when the examined object is logically equal to the specified operand, as determined by calling the Object.equals(java.lang.Object) method on the examined object.
Комментариев нет:
Отправить комментарий