assertEquals(Object, Object)від JUnit4 / JUnit 5 або assertThat(actual, is(expected));від Hamcrest, запропоновані в інших відповідях, працюватимуть лише як обидва, так equals()і toString()переосмислені для класів (і глибоко) порівняних об'єктів.
Це важливо, оскільки тест рівності у твердженні покладається equals()і повідомлення про помилку тесту покладається на toString()порівняні об'єкти.
Для вбудованих класів , таких як String, Integerі тому для ... без проблем , як вони перекриють як equals()і toString(). Тож цілком справедливо стверджувати List<String>або List<Integer>з assertEquals(Object,Object).
І з цього приводу: ви повинні перекрити equals()клас, тому що це має сенс з точки зору рівності об'єктів, а не лише для спрощення тверджень у тесті з JUnit.
Щоб полегшити твердження, у вас є інші способи.
Як хороша практика, я віддаю перевагу бібліотекам твердження / відповідності.
Ось рішення AssertJ .
org.assertj.core.api.ListAssert.containsExactly() це те, що вам потрібно: він перевіряє, що фактична група містить саме задані значення і більше нічого, для того, як зазначено в javadoc.
Припустимо Fooклас, де ви додаєте елементи і де ви можете їх отримати.
Тест на Fooце підтверджує, що два списки мають однаковий вміст:
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
@Test
void add() throws Exception {
Foo foo = new Foo();
foo.add("One", "Two", "Three");
Assertions.assertThat(foo.getElements())
.containsExactly("One", "Two", "Three");
}
Хорошим моментом AssertJ є те, що декларування Listочікуваного як очікуваного є непотрібним: це робить твердження випрямленням і код більш читабельним:
Assertions.assertThat(foo.getElements())
.containsExactly("One", "Two", "Three");
Але бібліотеки затвердження / відповідників є обов'язковими, тому що це дійсно далі.
Припустимо, зараз Foo не зберігаються екземпляри Strings, а Bars.
Це дуже поширена потреба. З AssertJ твердження все ще просто написати. Краще ви можете стверджувати, що вміст списку є рівним, навіть якщо клас елементів не перекриває, equals()/hashCode()тоді як JUnit вимагає:
import org.assertj.core.api.Assertions;
import static org.assertj.core.groups.Tuple.tuple;
import org.junit.jupiter.api.Test;
@Test
void add() throws Exception {
Foo foo = new Foo();
foo.add(new Bar(1, "One"), new Bar(2, "Two"), new Bar(3, "Three"));
Assertions.assertThat(foo.getElements())
.extracting(Bar::getId, Bar::getName)
.containsExactly(tuple(1, "One"),
tuple(2, "Two"),
tuple(3, "Three"));
}
assertArrayEqualsнаш час. Використовувати в поєднанні зList#toArray.