Пожалуйста, посмотрите на эти примеры тестов:
public class Test {
private List<Person> personList;
private Person peter = new Person("087", "Peter", parse("1980-01-01"));
private Person john = new Person("081", "John", parse("1980-01-22"));
@BeforeEach
void setup() {
personList = new ArrayList<>();
personList.add(peter);
personList.add(john);
}
@Test
void assertjTest() {
assertThat(personList).extracting("age", "name", "date")
.containsExactly(
tuple("087", "Peter", parse("1980-01-01")),
tuple("081", "John", parse("1980-01-22"))
);
}
@Test
void hamcrestTest() {
org.hamcrest.MatcherAssert.assertThat(personList,
contains(
allOf(
hasProperty("age", is("087")),
hasProperty("name", is("Peter")),
hasProperty("date", is(parse("1980-01-01")))
),
allOf(
hasProperty("age", is("081")),
hasProperty("name", is("John")),
hasProperty("date", is(parse("1980-01-22")))
)
));
}
}
А давайте подробнее рассмотрим:
containsExactly
contains
метод является альтернативой для него. Принимая во внимание, что hasItem
больше похоже на assertj.contains
.
кортеж
Может быть заменен комбинацией allOf
и hasProperty
. На мой взгляд, это выглядит некрасиво, и я бы подумал только об использовании new Person("a","b","c")
. Если у вас нет дополнительных полей, которые вы не хотите проверять.
синтаксический анализ
Здесь я только что использовал один и тот же метод для них обоих. Если вы посмотрите на него более точно, вы заметите, что этот метод не имеет ничего общего с сопоставителями. Это просто анализ строки на сегодняшний день с использованием new SimpleDateFormat("yyyy-MM-dd")
. Если вы не хотите использовать assertj's
, вы можете легко извлечь его в некоторый класс утилит.