Можно ли исключить некоторые поля из assertJ с помощьюFieldByFieldElementComparator?

Как добиться следующего:

List<Data> streams = new ArrayList<>();
assertThat(streams).usingFieldByFieldElementComparatorIgnoringGivenFields("createdOn").containsOnly(data1, data2);

person Vel Ganesh    schedule 23.03.2018    source источник


Ответы (1)


Используйте ListAssert.usingElementComparatorIgnoringFields(String... fields), который делает то же самое, что и ListAssert.usingFieldByFieldElementComparator(), но позволяя игнорировать некоторые поля/свойства:

Использовать поле/свойство путем сравнения полей/свойств для всех полей/свойств, кроме указанных.

Итак, вы могли бы написать:

List<Data> streams = new ArrayList<>();
//...
Assertions.assertThat(streams)
          .usingElementComparatorIgnoringFields("createdOn")
          .containsOnly(data1, data2);
person davidxxx    schedule 23.03.2018
comment
Можно ли уменьшить сравнение Date() на 1000 мс (операция isCloseTo) в приведенном выше формате кода, который вы предложили? - person Vel Ganesh; 28.03.2018
comment
@Vel Ganesh Добро пожаловать. Я не думаю, что это возможно с этим компаратором AssertJ. Для таких требований я обычно исключаю его из сравнения AssertJ и выполняю его с утверждением JUnit, например: Assert.assertTrue(date.after(lowerLimitDate) && date.before(upperLimitDate)); - person davidxxx; 29.03.2018
comment
У меня были проблемы с этим по какой-то странной причине, но использование usingElementComparatorOnFields("foo", "bar") было весьма полезным. - person Philippe; 12.12.2019