Это орг.тесты JUnit.Утверждать.assertThat лучше, чем орг.hamcrest.Матчерассерт.assertThat?

Я новичок в JUnit и Hamcrest и хотел бы получить советы по лучшей практике, чтобы я мог решить, какую документацию изучать в первую очередь.

для начала, какой из этих assertThat методы лучше?

  1. org.тесты JUnit.Утверждать.assertThat (от junit-4.11.jar)
  2. org.hamcrest.Матчерассерт.assertThat (от hamcrest-core-1.3.jar)

по словам одного человека в прошлом году,"JUnit имеет assertThat метод, но hamcrest имеет свой собственный способ assertThat, что делает то же самое.".

по словам кого-то в начале этого года, Hamcrest "потенциально может дать лучшие сообщения об ошибках, потому что сопоставитель вызывается для описания несоответствия".

трудно сказать, какие версии Junit и Hamcrest были сравнены в этих сообщениях. Поэтому я хотел бы получить рекомендацию, основанную на самых последних выпущенных версиях.

2 ответов


это почти то же самое.

последние версии JUnit теперь включают hamcrest.

Infact org.тесты JUnit.Утверждать.assertThat ' s метод подпись

public static <T> void assertThat(T actual,
                              org.hamcrest.Matcher<T> matcher)

который вы заметите, использует hamcrest matchers.

вы все еще можете включить свою собственную версию hamcrest, потому что JUnit не обновляется очень часто и не всегда может использовать последнюю версию hamcrest.

согласно maven ПФЛ, JUnit 4.11 использует hamcrest 1.3, который, я считаю, является самым последним на момент написания этой статьи.

редактировать Я только что прочел вашу вторую статью http://blog.code-cop.org/2014/02/assert-or-matcherassert.html и он описывает 2 небольшие различия в hamcrest assertThat это делает его более полезным:

  1. когда совпадение не удается, сообщение об ошибке включает в себя то, что было другим, а не "ожидалось X, но было Y". пользовательские Hamcrest matchers может включите более подробную информацию о том, что именно было неправильно, реализовав describeMismatch()
  2. на assertThat подпись отличается в hamcrest с помощью T actual, Matcher<? super T> matcher что позволяет вычислителей супер типов (как совпадений сравнивать числа и дубли). Обычно это не имеет значения, но когда вам это нужно, это хорошая функция.

чтобы использовать org.hamcrest.MatcherAssert.assertThat


фрагмент JUnit в 5-х:

однако, JUnit Юпитера