Существует ли версия JUnit assertThat, которая использует функциональность Hamcrest для «descriptionMismatch»? - PullRequest
6 голосов
/ 12 октября 2010

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 31 октября 2010

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

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

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

1 голос
/ 23 декабря 2014

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

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

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

0 голосов
/ 12 октября 2010

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

...