Domanda

Io non sono molto di un guru Eclipse, quindi ti prego di perdonare la mia goffaggine.

In Eclipse, quando chiamo Assert.assertEquals (obj1, obj2) e questo non funziona, come faccio ad ottenere l'IDE per mostrare me obj1 e obj2?

JExample , ma credo che non dovrebbe fare la differenza.


Modifica : Ecco quello che vedo:
 
(fonte: yfrog.com )
.

È stato utile?

Soluzione

Se le informazioni nella visualizzazione JUnit non è abbastanza per voi, è sempre possibile impostare un punto di interruzione un'eccezione su, per esempio, java.lang.AssertionError. Quando si esegue il test, il debugger si arresta immediatamente prima che venga effettivamente generata l'eccezione.

Altri suggerimenti

  1. Il confronto con la traccia di fallimento non è un compito facile quando l'oggetto è un po 'complesso.
  2. Il confronto con debugger è utile se non si è ridefinito toString (). Rimane ancora molto noioso come soluzione perché è necessario controllare con i vostri occhi ogni oggetti da entrambi i lati.

Junit Plug-in Eclipse offre un'opzione quando si verifica un errore: "Confronto vero e proprio con TestResult previsto". La vista è abbastanza vicino ai classici strumenti di confronto di contenuti: Il confronto con oggetti String


Il problema è che esso e 'disponibile solo quando si writeassertEquals() con oggetti String (nello screenshot, possiamo vedere che l'opzione in un angolo non si propone con nessuna classe String): Il confronto con oggetti String

È possibile utilizzare toString() sul vostro oggetto nel asserzione ma non è una buona soluzione:

  • in primo luogo, a correlare toString() con equals(Object) ... modifica di uno deve comportare la modifica degli altri.
  • In secondo luogo, la semantica non è più rispettata. toString() dovrebbe restituire un metodo utile per eseguire il debug lo stato di un oggetto, di non identificare un oggetto nella Java semantica (equals(Object)).

Secondo me, penso che il plugin Eclipse JUnit manca una caratteristica.
Quando paragone non regge, anche quando non si confronta String oggetti, dovrebbe offrire un confronto tra i due oggetti che si basano sul loro metodo toString().
Si potrebbe offrire un modo visivo minimo di confronto tra due oggetti disuguali.
differenze Naturalmente, come equals(Object) non è necessariamente correlata alla toString(), evidenziati dovrebbero essere studiati con i nostri occhi, ma sarebbe già una base molto buona e in ogni caso, è molto meglio di nessun strumento di confronto.

Assert.assertEquals() metterà la rappresentazione toString() dell'oggetto previsto e quello effettivo nel messaggio del AssertionFailedError getta, e eclissare visualizzerà che nella parte "fallimento traccia" della vista JUnit:

alt text
(fonte: ibm.com )

Se si dispone di oggetti complessi che si desidera esaminare, dovrete utilizzare il debugger e mettere un punto di interruzione all'interno Assert.assertEquals()

Cosa vedi?

Quando si esegue assertTrue () e non riesce, si vede un nullo.

Ma quando lo fai assertEquals, si suppone per mostrare ciò che si aspettava e ciò che in realtà ha.

Se si utilizza JUnit, MKE che si sta guardando la vista JUnit e spostando il mouse per il test fallito.

FEST Assert visualizzerà finestra di confronto in caso di errore di asserzione, anche quando gli oggetti si confronta sono non stringhe. Ho spiegato più in dettaglio href="http://piotrjagielski.com/blog/a-cool-technique-for-object-comparison-in-junit/" sul mio blog .

Se si sta confrontando è una stringa, allora è possibile fare doppio clic su elemento pila e sarà una finestra popup che mostra il diff in Eclipse.

Questo funziona solo con le stringhe però. Per il caso generale l'unico modo per vedere la vera ragione è quella di installare un punto di interruzione e passo in esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top