Тестирование равенства сущности самой себе

 
 
 
Сообщения:47
Здравствуйте. В проекте JTalks в тестировании доменного слоя есть такой метод
 
    @Test
    public void testEqualsReflexivity() {
        first = new EntityObject();

        assertTrue(first.equals(first));
    }

Понятно, что проверяется равенство обьекта себе же, но вопрос в том, не очевидно ли это? IntelliJ, к примеру, подсказывает, что обьект вызывает метод с аргументом такого же типа, как и сам обьект. Стоит ли всегда выполнять такие тесты в каждом проекте? И почему для этого метода в названии указано "Reflexivity"? Существует какая - то догма или принцип в проверке равенства сущностей самим себе?
Изменен:15 ноя 2017 19:28
 
 
Сообщения:621
igor_:
И почему для этого метода в названии указано "Reflexivity"? Существует какая - то догма или принцип в проверке равенства сущностей самим себе?

Есть ряд правил для переопределения метода equals.
Метод equals() должен обладать следующими свойствами:
-Симметричность: Для двух ссылок, a и b, a.equals(b) тогда и только тогда, когда b.equals(a)
-Рефлексивность: Для всех ненулевых ссылок, a.equals(a)
-Транзитивность: Если a.equals(b) и b.equals(c), то тогда a.equals(c)

Я только учусь
 
 
Сообщения:47
Спасибо за ответ, а в каждом проекте следует, например, тестировать сущности на эквивалентность (рефлексивность, симметричность, транзитивность)?
 
 
Сообщения:621
Я не знаю, что ответить, т.к. философский вопрос.
во первых, я еще не встречал переопределения equals || hashCode в проектах.
Во вторых, относительно уже давно ведется святая война о необходимости тестирования как методов, так и целых классов. Даже относительно написания тест-кейсов идут битвы - одно/несколько условий , изолированый/сквозной функционал.
Скорее надо опираться на однообразие командных методов.

Я только учусь
 
 
Сообщения:9640
Как правило такое не тестируют потому как equals() & hashCode() генерируется IDE и их никто не меняет. В JTalks же эти методы реализовывались вручную (нужно было чтоб работало правильно если сущность - не сущность, а Hibernate Proxy). А раз код написан вручную, то а) в нем можно и ошибиться б) кто-то может его подправить и нужно убедиться что правки были верными.

Далеко не весь код в JTalks написан хорошо. Писался он людьми разного уровня и прилежности, а просматривать его тщательно не всегда было время. Так что правильно делаешь, что сомневаешься в некоторых кусках. По-хорошему нестандартный код (как вот эти тесты) должны обязательно быть с комментариями которые объясняют почему было принято такое решение. Тогда бы не было таких конфузов.
Изменен:16 ноя 2017 06:17
 
 
Сообщения:47
Благодарю!
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет