2013-05-13 15 views
6

Sto usando assert uguale per confrontare due numeriMessaggio di eccezione personalizzato utilizzando JUnit assertEquals?

Assert.assertEquals("My error message", First , Second); 

Poi, quando ho generare il rapporto di prova ottengo

"Il mio messaggio di errore previsto (Prima) era (Seconda) "

Come posso personalizzare la parte che ho messo in corsivo? E il formato dei numeri?

+0

Ho pensato che stai usando Java. Se è Scala, modifica i tag di conseguenza. –

risposta

5

Il messaggio è codificato nella classe Assert. Si dovrà scrivere il proprio codice per la produzione di un messaggio personalizzato:

if (!first.equals(second)) { 
    throw new AssertionFailedError(
     String.format("bespoke message here", first, second)); 
} 

(Nota: quanto sopra è un esempio di massima - ti consigliamo di verificare la presenza di valori nulli ecc vedere il codice di Assert.java per vedere come è fatto).

7

Si può usare qualcosa di simile:

int a=1, b=2; 
String str = "Failure: I was expecting %d to be equal to %d"; 
assertTrue(String.format(str, a, b), a == b); 
+1

Ciò non migliorerà la situazione. L'OP sa già come aggiungere un messaggio di errore, ma l'obiettivo è quello di modificare il testo della parte in corsivo. La soluzione avrà ancora la dicitura in vigore. –

+0

Sei sicuro? In esecuzione su Eclipse con (2,1) Ricevo solo "Fallimento: mi aspettavo 2 uguale a 1" e non la parte "attesa ... era" ... – Salem

+1

@Salem perché stai usando assertTrue, non assertEquals – kryger

0

Grazie alla vostra risposta che ho trovato nella classe Assert questo

 static String format(String message, Object expected, Object actual) { 
    String formatted= ""; 
    if (message != null && !message.equals("")) 
     formatted= message + " "; 
    String expectedString= String.valueOf(expected); 
    String actualString= String.valueOf(actual); 
    if (expectedString.equals(actualString)) 
     return formatted + "expected: " 
       + formatClassAndValue(expected, expectedString) 
       + " but was: " + formatClassAndValue(actual, actualString); 
    else 
     return formatted + "expected:<" + expectedString + "> but was:<" 
       + actualString + ">"; 
} 

Credo che non riesco a modificare la classe Junit Assert, ma Posso creare una nuova classe nel mio progetto con lo stesso nome, cambiando semplicemente formato, ho ragione? Oppure posso semplicemente modificare il formato nella mia classe e influenzerà l'eccezione generata?

+2

Sì, puoi seguire questo approccio. Questo è essenzialmente ciò che sto suggerendo nella mia risposta: dovrai scrivere il tuo codice per fare il test se hai bisogno di cambiare il messaggio. –

Problemi correlati