JUnit5 / AssertJ создает запись в журнале при утверждении

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

Есть ли способ добиться этого в AssertJ? может какие-то слушатели, расширения, ...

В настоящее время команда использует простой JUnit 5 - я действительно хотел бы представить AssertJ.

На самом деле желаемое поведение достигается за счет перегрузки утверждений JUnit.
Итак, вместо Assertions.assertEquals(expected, actual) есть метод

MyAssertions.assertEqualsAndLog(Object expected, Object actual) {
    log(); //do the logging
    Assertions.assertThat(expected, actual)
}

Но на самом деле я не хочу этого делать.
Кто-нибудь знает лучший способ добиться этого?

Благодарность


person markus    schedule 02.12.2020    source источник
comment
Модульные тесты должны быть короткими. Настройте платформу тестирования для создания необходимого отчета.   -  person Thorbjørn Ravn Andersen    schedule 02.12.2020


Ответы (3)


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

Пример:

// initialize the description consumer
final StringBuilder descriptionReportBuilder = new StringBuilder(String.format("Assertions:%n"));
Consumer<Description> descriptionConsumer = desc -> descriptionReportBuilder.append(String.format("-- %s%n", desc));

// use the description consumer for any following assertions descriptions.
Assertions.setDescriptionConsumer(descriptionConsumer);

// execute some assertions
TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, Race.HOBBIT);
assertThat(frodo.getName()).as("check name")
                          .isEqualTo("Frodo");
assertThat(frodo.getAge()).as("check age")
                          .isEqualTo(33);

// get the report
String descriptionReport = descriptionReportBuilder.toString();

распечатает этот отчет:

Assertions:
-- check name
-- check age

См. https://assertj.github.io/doc/#assertj-core-assertion-description-consumer

person Joel Costigliola    schedule 02.12.2020
comment
аааааааааааааааааааааааааааааааааааул более/альной, описания .... это меня до чертиков вышибло. Спасибо, Джоэл, библиотека фантастическая. - person Stephen Patten; 14.05.2021

Хорошо, к сожалению, нет механизма для событий / хуков / и т.д. (в сочетании с утверждениями). в AssertJ.
Я обнаружил проблему № 1518, в которой описывается то же самое поведение.

person markus    schedule 02.12.2020

Причина, по которой отслеживание / подсчет / регистрация отдельных утверждений без сбоев в настоящее время невозможно, заключается в том, что общий контракт всех (?) Библиотек утверждений очень прост: бросать AssertionError при неудаче, ничего не делать при успехе.

Для JUnit, видящего успешные события на уровне утверждений, потребуется новый способ связывания утверждений с фреймворком. Учитывая очень-очень медленное внедрение opentest4j, вероятно, никогда не будет соглашения между сопровождающими lib.

Тем не менее, любая отдельная структура, такая как AssertJ, может предоставить механизм реагирования на успешные события. Вам просто нужно убедить их реализовать это - как показывает проблема GitHub в другом ответе.

person johanneslink    schedule 02.12.2020