2010-10-12 4 views
6

In ogni versione di JUnit ho cercato (fino a 4.8.1), una mancanza di assertThat visualizzerà un messaggio di errore che assomiglia a:Esiste una versione di JUnit assertChe utilizza la funzionalità 'describeMismatch' di Hamcrest?

atteso: [describeTo]
ottenuto: [rappresentazione String dell'oggetto]

In altre parole, visualizza toString() dell'oggetto anziché la descrizione della corrispondenza mancata dal Matcher. Se utilizzo l'assertThat da org.hamcrest.MatcherAssert.assertThat, chiamerà "describeMismatch" e visualizzerà un messaggio di errore più utile.

Sto usando Junit in modo errato o non c'è attualmente nessuna versione di JUnit che farà ciò che voglio? La maggior parte delle persone usa l'affermazione di Hamcrest?

risposta

3

Risposta breve: no.

Per quanto posso dire, la versione più recente di Hamcrest (1.2) ha introdotto firme di tipi che sono incompatibili con la versione 1.1, di cui JUnit attualmente dipende. Non sono sicuro dell'entità del danno (per così dire) creato dal cambiamento in Hamcrest, ma non sembra che il team di JUnit abbia fretta di aggiornare (vedere lo open issue).

Non sono completamente sicuro di aver risolto il problema, ma sto pianificando di utilizzare MatcherAssert.assertThat(). Questo può richiedere una versione specifica di JUnit (junit-dep-xxx credo) che non avrà conflitti di classpath con Hamcrest. In caso contrario, è possibile ricevere NoSuchMethodErrors quando assertThat() effettua la chiamata a describeMismatch().

+0

Grazie. Usi l'affermazione di Hamcrest? Allora, o cosa? – Jacob

+0

Hey Jacob, si spera che la mia modifica risponda alla domanda :) – Grundlefleck

0

Utilizzare other versionassertThat(String, T, Matcher<T>) e nel primo argomento scrivere il proprio messaggio che ti fornirà una descrizione migliore dell'errore.

+2

Grazie, Boris. Questo è un buon modo per creare una descrizione. Tuttavia, preferirei utilizzare il messaggio di errore predefinito che il Matcher può generare tramite il suo metodo "describeMismatch". – Jacob

+0

Prego, Jacob. –

0

Sì, questo è fissato da this commit in JUnit 4.11:

Come sottolineato da Steve Freeman del Hamcrest, l'interfaccia Matcher ora ha un ulteriore metodo describeMismatch. Per essere sicuri di prendere tali miglioramenti in futuro, viene utilizzato MatcherAssert al posto di duplicando la sua implementazione.

Insieme allo upgrade to Hamcrest 1.3 (anche in 4.11), queste due versioni funzionano bene insieme.