Утверждение отдельных объектов в списке с помощью AssertJ - PullRequest
0 голосов
/ 01 апреля 2020

Я использую библиотеку AssertJ для выполнения утверждений в моем тесте. В этом случае я хочу проверить, находится ли каждый Date объект в списке после другой даты.

Поэтому я, очевидно, могу сделать следующее:

Date dateOne = new Date(someTimestamp);
Date dateTwo = new Date(otherTimestamp);

Assertions.assertThat(dateOne).isAfter(dateTwo);

Нет вопросов по этому поводу.

Но что, если я захочу проверить каждый элемент списка, чтобы убедиться, что все они указаны после указанной даты.


Date dateOne = new Date(someTimestamp);
Date dateTwo = new Date(otherTimestamp);
Date dateThree = new Date(fooBarTimestamp);

List<Date> dates = Arrays.asList(dateOne, dateTwo);

//and here I want to make sure that all Dates in dates are after dateThree

Я справился с этим, создав пользовательский org.assertj.core.api.Condition и использовал следующий синтаксис:

Assertions.assertThat(dates).is(allAfterDate(dateThree));

но компаратор выглядит очень аккуратно, и, что самое важное, мой SonarQube жалуется, что эта подпись:

Condition<List<? extends Date>> allAfterDate(final Date dateToCompare) {...}

ломает универсальные c типы подстановочных знаков должны не должен использоваться в возвращаемых параметрах rule. Я склонен верить в SonarQube, если я не уверен, что это правило, которое я могу нарушить в этот раз. И я не уверен.

Мне нравится использовать SoftAssertions, поэтому обходной путь будет использовать:

SoftAssertions assertions = new SoftAssertions();

dates.forEach( date -> {
    assertions.assertThat(date).isAfter(dateThree);
});

assertions.assertAll();

Но я просто не могу чувствовать, что это возможно использовать этот крутой AssertJ синтаксис, который большинству разработчиков так нравится; -)

Есть ли способ, которым я могу сделать что-то похожее на это?

Assertions.assertThat(dates).everySingleElement().isAfter(dateThree);

И если это невозможно, что будет лучшим и самый чистый способ сделать это?

(И я знаю, что могу подавить сонар с помощью //NOSONAR, я просто не хочу)


1 Ответ

2 голосов
/ 02 апреля 2020

Попробуйте allSatisfy:

assertThat(dates).allSatisfy(date -> assertThat(date).isAfter(dateThree));

надеюсь, это поможет и достаточно крутой синтаксис для вас; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...