Есть ли версия JUnit assertThat, в которой используется функция Hamcrest «describeMismatch»?

В каждой версии JUnit, которую я пробовал (до 4.8.1), при неудачном assertT выводится сообщение об ошибке, которое выглядит следующим образом:

ожидается: [describeTo]
получил: [Строковое представление объекта]

Другими словами, он будет отображать toString () объекта вместо описания несоответствия из Matcher. Если я использую assertThat из org.hamcrest.MatcherAssert.assertThat, он вызовет «describeMismatch» и отобразит более полезное сообщение об ошибке.

Я неправильно использую Junit или в настоящее время нет версии JUnit, которая будет делать то, что я хочу? Большинство людей используют Hamcrest assertThat тогда?


person Jacob    schedule 12.10.2010    source источник


Ответы (3)


Короткий ответ: нет.

Насколько я могу судить, самая последняя версия Hamcrest (1.2) представила сигнатуры типов, несовместимые с версией 1.1, от которой в настоящее время зависит JUnit. Я не уверен в степени ущерба (так сказать), нанесенного изменением в Hamcrest, но похоже, что команда JUnit не торопится с обновлением (см. открытый вопрос).

Я не совсем уверен, что решил проблему, но планирую использовать MatcherAssert.assertThat(). Для этого может потребоваться конкретная версия JUnit (я полагаю, junit-dep-xxx), в которой не будет конфликтов путей к классам с Hamcrest. В противном случае вы можете получить NoSuchMethodErrors, когда assertThat() сделает вызов describeMismatch().

person Grundlefleck    schedule 31.10.2010
comment
Спасибо. Вы используете Hamcrest assertThat тогда или как? - person Jacob; 01.11.2010

Да, это исправлено этим коммитом в JUnit 4.11:

Как отметил Стив Фриман из Hamcrest, интерфейс Matcher теперь имеет дополнительный метод describeMismatch. Чтобы не допустить таких улучшений в будущем, вместо дублирования его реализации используется MatcherAssert.

Эти две версии работают вместе с обновлением до Hamcrest 1.3 (также в 4.11). хорошо вместе.

person Joe    schedule 23.12.2014

Используйте другая версия assertThat(String, T, Matcher<T>) и в первом аргументе напишите собственное сообщение, которое даст вам лучшее описание сбоя.

person Boris Pavlović    schedule 12.10.2010
comment
Спасибо, Борис. Это хороший способ создать описание. Однако я бы предпочел использовать встроенное сообщение об ошибке, которое Matcher может сгенерировать с помощью своего метода descriptionMismatch. - person Jacob; 12.10.2010