Подтвердить что ты не робот

Проверить два экземпляра объекта равны JUnit

У меня есть два объекта A и B. Объект A - это фактический результат, который я получаю во время теста JUnit. Объект B заключается в том, что я выполняю фактический вызов end db и принимаю как ожидаемый обзор. Мне нужно утверждать, что два экземпляра объекта A и B равны по значению, а не фактическому объекту.

В JUnit есть метод, называемый assertEquals(obj expected, obj actual), но я не хочу этого.

Есть ли способ или обходной путь для достижения того же?

4b9b3361

Ответ 1

Подумайте о том, чего именно вы пытаетесь достичь. Вы хотите проверить идентификацию объекта или убедиться, что два объекта имеют точно такие же данные? Из вашего предложения assertEquals, я предполагаю, что вы хотите идти по полю.

Если объекты мелкие, вы можете использовать

assertThat(actual, samePropertyValuesAs(expected));

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

assertThat(actual, sameBeanAs(expected));

Если вы используете AssertJ, вы также можете использовать встроенные функции следующим образом:

assertThat(actual).isEqualToComparingFieldByField(expected);

Одна вещь, которую вы не хотите делать, переопределяет метод equals для этого, поскольку это может измениться в будущем для удовлетворения потребностей бизнеса.

Ответ 2

Если вы хотите глубокого равенства, вы можете использовать Commons Lang3 EqualsBuilder#reflectionEquals():

Assert.assertTrue(EqualsBuilder.reflectionEquals(expected,actual));

Ответ 3

вы можете утверждать каждого члена этих двух объектов!

например. assertThat(actual).isEqualToComparingFieldByField(expected);

Ответ 4

assertEquals() вызывает equals() на ваших объектах, и об этом нет. Вы можете сделать что-то вроде public boolean like(MyClass b) в своем классе, в котором вы бы сравнили все, что захотите. Затем вы можете проверить результат, используя assertTrue(a.like(b)).

Ответ 5

Вам необходимо переопределить метод equals и для эффективной практики hashCode для вашего класса. После этого assertEquals(obj expected, obj actual) не будет проверять ссылку, но будет использовать логику, реализованную в методе equals.