Сравнение списков пользовательских объектов в JUnit - PullRequest
0 голосов
/ 18 февраля 2019

Я знаю, что этот вопрос задавался раньше.Однако ни одно из решений не работает для меня.У меня есть пользовательский класс, который состоит из 3 классов.Это выглядит так:

Class compositeClass
{
UserDefinedClass1 useClass1;
UserDefinedClass2 useClass2;
UserDefinedClass3 useClass3;
}

У меня есть метод тестирования, мне нужно сравнить списки этих составных классов.Я пробовал несколько вариантов равенства Assert, таких как: Hamcrest:

Assert.assertThat(mockCompositeList().getStandardLoadComposites(), 
                    equalTo(closeRequest.getStandardLoadComposites()));

Assert.assertArrayEquals(mockCompositeList().getStandardLoadComposites().toArray(), 
                closeRequest.getStandardLoadComposites().toArray());

Оба экземпляра возвращают эту ошибку AssertionError:

Ожидается , но

Кажется, он сравнивает ссылку, а не значения в объектах.Нужно ли переопределять оператор equals, чтобы он сравнивал значения в объектах пользовательских объектов?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Спасибо за ответ.Я создал вспомогательный метод, который сравнивал значения в списке.Переопределить оператор равенства для составного класса было бы много работы, когда в классе установлено только 3 значения.Итак, я сравнил значения в каждом объекте в списке и вернул true / false в зависимости от сравнения.Затем использовал метод в assert equals и сравнил логическое значение.

0 голосов
/ 18 февраля 2019

Рассмотрите возможность сравнения объектов внутри списка, вместо сравнения самого списка. Я предполагаю, что вы создали один фиктивный список, чтобы утверждать ожидаемый результат, и для фактического результата (Список) ваш тестируемый метод создаст новый список, используя новый .В любом случае этот метод equals будет сравнивать id трех объектов и вернет true, если переопределено. Но попробуйте переопределить ваш метод equals и hash, просто чтобы убедиться, что ваше утверждение работает нормально.

Два списка не обязательно должны быть одинаковыми.фиктивные объекты, которые вы создали и передали вашему классу, не должны меняться после некоторого момента. Если это то, что вы хотите убедиться в своем тесте, то сравнение объектов в списке сделает это за вас.

...