2014-12-02 15 views
10

Ich bin neu bei JUnit und Hamcrest und hätte gerne Best-Practice-Ratschläge, damit ich entscheiden kann, welche Dokumentation zuerst studiert wird.Ist org.junit.Assert.assertThat besser als org.hamcrest.MatcherAssert.assertThat?

Für Anfänger, welche dieser assertThat Methoden ist besser?

  1. org.junit.Assert.assertThat (von junit-4.11.jar)
  2. org.hamcrest.MatcherAssert.assertThat (von hamcrest-core-1.3.jar)

Gemäß einem Person letztes Jahr, "JUnit has the assertThat method, but hamcrest has its own assertThat method that does the same thing.".

Laut jemand früher dieses Jahr, Hamcrest "could potentially give better error messages because the matcher is called to describe the mismatch".

Es ist schwer zu sagen, welche Versionen von Junit und Hamcrest in diesen Beiträgen verglichen wurden. Daher möchte ich eine Empfehlung basierend auf den aktuellsten veröffentlichten Versionen.

Antwort

17

Es ist die fast die exakt gleiche Sache.

Aktuelle Versionen von JUnit enthalten jetzt hamcrest.

Infact org.junit.Assert.assertThat ‚s Methode Signatur ist

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

, die Sie bemerken werden hamcrest Matcher verwendet.

Sie möchten vielleicht immer noch Ihre eigene Version von hamcrest hinzufügen, da JUnit nicht sehr oft aktualisiert wird und nicht immer die neueste Version von hamcrest verwendet.

Nach dem maven pom, JUnit 4.11 verwendet hamcrest 1.3, die ich glaube, ist die aktuellste zum Zeitpunkt des Schreibens.

EDIT Ich habe gerade Ihren zweiten Artikel http://blog.code-cop.org/2014/02/assert-or-matcherassert.html lesen und es beschreibt 2 geringfügige Unterschiede im hamcrest assertThat, dass es nützlicher machen:

  1. , wenn das Spiel ausfällt, enthält die Fehlermeldung, was anders als "erwartet X aber war Y". benutzerdefinierte Hamcrest Matcher können detailliertere Informationen darüber enthalten, was genau falsch war, indem describeMismatch()
  2. Die assertThat Unterschrift ist in Hamcrest mit T actual, Matcher<? super T> matcher anders, die Matchers zu Super-Typen (wie Matcher, Integers und Doubles zu vergleichen) ermöglicht. Dies ist normalerweise nicht wichtig, aber wenn Sie es brauchen, ist dies ein nettes Feature zu haben.

So org.hamcrest.MatcherAssert.assertThat

+0

Danke dkatzel, es war hilfreich zu wissen, dass JUnit nicht sehr oft aktualisiert wird, also möchte ich vielleicht meine eigene Version von Hamcrest einbinden. Es ist diese Art von Wissen, nach der ich gesucht habe, also nochmals vielen Dank. –

+0

@MichaelOsofsky Ich habe meine Antwort aktualisiert, die ich fand, dass sie etwas anders sind, jetzt bevorzuge ich Hamcrest. – dkatzel

+0

Danke @dkatzel, das ist wirklich hilfreich. –

0

Ein Auszug aus JUnit 5's User Guide verwenden:

jedoch org.junit.jupiter.Assertions Klasse JUnit Jupiter bietet keine assertThat() Methode, wie die org.junit.Assert Klasse in JUnit 4 ist gefunden eines, das eine hamcrest akzeptiert Matcher .Stattdessen werden Entwickler dazu ermutigt, die integrierte Unterstützung für Matcher zu verwenden, die von Assertion-Bibliotheken von Drittanbietern bereitgestellt werden.

Ich denke, für JUnit 4, hamcrest des assertThat ist (offiziell) bevorzugt.

Verwandte Themen