2010-10-12 6 views
6

In jeder Version von JUnit I (bis 4.8.1) versucht haben, wird ein Fehler assertThat eine Fehlermeldung angezeigt, die wie folgt aussieht:Gibt es eine Version von JUnit assertThat, die die Hamcrest Funktion 'describeMismatch' verwendet?

erwartet: [describeTo]
bekam: [String-Darstellung des Objekts]

Mit anderen Worten, es wird den toString() des Objekts anstelle der Mismatch-Beschreibung aus dem Matcher anzuzeigen. Wenn ich das assertThat von org.hamcrest.MatcherAssert.assertThat verwende, wird es 'describeMismatch' aufrufen und eine hilfreichere Fehlermeldung anzeigen.

Bin ich mit Junit falsch oder gibt es derzeit keine Version von JUnit, die das tun, was ich will? Benutzen die meisten Leute das Hamcrest-Assert, was dann?

Antwort

3

Kurze Antwort: nein.

Soweit ich die neueste Version von hamcrest sagen kann (1.2) hat Signaturen eingeführt Art, die mit der Version 1.1 nicht kompatibel sind, die JUnit hängt aktuell. Ich bin mir nicht sicher, welches Ausmaß der Schaden (sozusagen) durch die Änderung in Hamcrest verursacht hat, aber es scheint nicht, dass das JUnit-Team es eilig hat zu aktualisieren (siehe open issue).

Ich bin nicht ganz sicher, ob ich mein Problem gelöst haben, aber ich plane MatcherAssert.assertThat() zu verwenden. Dies kann eine bestimmte Version von JUnit (junit-dep-xxx, glaube ich) erfordern, die keine Klassenpfadkonflikte mit Hamcrest haben wird. Andernfalls erhalten Sie möglicherweise NoSuchMethodErrors, wenn assertThat() den Anruf an describeMismatch() macht.

+0

Danke. Benutzt du das Hamcrest-Assert, was oder? – Jacob

+0

Hey Jacob, hoffentlich beantwortet mein Edit diese Frage :) – Grundlefleck

0

Verwenden other versionassertThat(String, T, Matcher<T>) und im ersten Argument Ihre eigene Nachricht schreiben, dass Sie eine bessere Beschreibung des Fehlers geben.

+2

Danke, Boris. Das ist eine nette Möglichkeit, eine Beschreibung zu erstellen. Allerdings würde ich lieber die eingebaute Fehlermeldung verwenden, die der Matcher mit seiner Methode "describeMismatch" erzeugen kann. – Jacob

+0

Gern geschehen, Jacob. –

0

Ja, das durch this commit in JUnit 4.11 festgelegt ist:

Wie von Steve Freeman von hamcrest weist darauf hin, der Matcher Schnittstelle jetzt hat eine zusätzliche Methode describeMismatch. Um sicher zu sein wie zum Verbesserungen in der Zukunft zu fangen, wird MatcherAssert statt Duplizieren deren Umsetzung verwendet.

Zusammen mit der upgrade to Hamcrest 1.3 (auch in 4.11) funktionieren diese beiden Versionen gut zusammen.