Как написать тестовый пример для метода equals

#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 because patron.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();
 

Он также имеет несколько вариантов для подавления других предупреждений.