#java #oop #junit #equals #testcase
#java #ооп #junit #равно #тестовый пример
Вопрос:
Как бы мне написать тестовый пример для этого метода equals, который сравнивает идентификационные номера после проверки, является ли объект «целым числом» или «Покровителем».
Вот метод:
public boolean equals(Object other) {
boolean bool = false;
if (other instanceof Patron) {
Patron patron = (Patron) other;
bool = this.idNumber == patron.idNumber;
} else if (other instanceof Integer) {
Integer id = (Integer) other;
bool = this.idNumber == id;
}
return bool;
Комментарии:
1. Вы должны создать различные экземпляры класса, а затем утверждать
obj1.equals(obj2)
, что это true или false, в зависимости от ожидаемого значения. Обратите внимание, что ваша обработкаInteger
разрывает ассоциативный контрактequals
becausepatron.equals(integer)
не всегда будет равнойinteger.equals(patron)
.2. Вообще говоря, вещи разных классов не следует считать равными.
3. Напишите тест так же, как для любого другого метода. Вызовите тестируемый метод с некоторым значением и сравните возвращаемое значение с тем, что вы ожидаете.
equals
ничем не отличается от любого другого метода здесь.
Ответ №1:
Если вы хотите проверить, соблюден ли контракт для методов equals
and hashCode
, я бы предложил использовать EqualsVerifier .
Если вы не хотите использовать внешнюю библиотеку, я бы посоветовал взглянуть на нее, чтобы получить представление о том, что (и почему) вам нужно протестировать. Это отличный источник для изучения equals
и hashCode
.
Написать тест очень просто:
EqualsVerifier.forClass(Foo.class).verify();
Существует также менее строгая альтернатива:
EqualsVerifier.simple()
.forClass(Foo.class).verify();
Он также имеет несколько вариантов для подавления других предупреждений.