2015-05-22 19 views
6

Sto usando JUnit 4.11.Perché l'eccezione JUnit Test fallisce sempre?

Eclipse Versione: Luna Service Release 2 (4.4.2)

ho bisogno di fare il test eccezione. Il codice può essere il seguente:

// src code 
public void myMethod throws MyException { 
    ... 
    throw new MyException(msg); 
    ... 
} 

// test code 
@Test (expected = MyException.class) 
public void testMyMethod() { 
    try { 
     myMethod(); 
     fail(); 
    } catch (MyException e) { 
     assertEquals(expectedStr, e.getMessage()); 
    } 
} 

Ma il test fallisce sempre, dove sto sbaglio?

+0

Aggiunta alla risposta (corretta) di @rgettman: È necessario verificare le eccezioni con JUnit's ['ExpectedException'] (http://junit.org/apidocs/org/junit/rules/ExpectedException.html). – Seelenvirtuose

risposta

4

Quando si fornisce un'eccezione expected all'annotazione Test, il test avrà esito positivo solo se l'eccezione prevista viene generata dal metodo di prova. Tuttavia, si cattura l'eccezione prima che si propaga fuori dal metodo.

Sembra che si voglia testare anche il messaggio di eccezione, quindi ri- throw l'eccezione e per soddisfare il test. A seconda che sia selezionato, potrebbe essere necessaria una clausola throws sul metodo.

+0

Non consiglierei di rilevare l'eccezione solo per testare il messaggio rilanciandolo per soddisfare il test. È preferibile utilizzare la regola [ExpectedException'] (http://junit.org/apidocs/org/junit/rules/ExpectedException.html). – Seelenvirtuose

+0

Se vuoi testare il messaggio e anche il fatto che l'eccezione è lanciata, puoi semplicemente rimuovere 'expected = MyException.class' e lasciare il resto del codice così com'è qui. Questo è stato il modo in cui hai testato le eccezioni prima che fosse aggiunto a JUnit in ogni caso, e funziona ancora. –

+0

@Seelenvirtuose Sì, penso che il tuo suggerimento sia buono. –