2014-11-10 7 views
9

Il metodoall'interno del blocco finally { } viene eseguito su un errore di asserzione Junit?Il blocco "finalmente" sparirà anche dopo che un test di Junit ha lanciato un errore di asserzione nel blocco "try"?

Assumere il seguente codice:

@Test 
public void testWriter() { 

    try { 
     writer.open(); 

     final List<MyBean> myBeans = new ArrayList<ProfileBean>(); 

     /** Add 2 beans to the myBeans List here. **/ 

     final int beansWritten = writer.writeBeans(myBeans); 

     // Say this assertion error below is triggered 
     org.junit.Assert.assertEquals("Wrong number of beans written.", -1, profilesWritten); 

    } finally { 
     writer.close(); // will this block run? 
    } 
} 

Ora sarà la corsa finally() blocco, proprio come un flusso regolare?

+2

Sì, dovrebbe essere eseguito. –

+0

possibile duplicato di [Capire try catch finalmente con return] (http://stackoverflow.com/questions/26658853/understanding-try-catch-finally-with-return) – StackFlowed

+0

Scusa, capisco il classico try, catch e finally flow . Questa domanda è diversa nel senso del relativo flusso di test Junit. –

risposta

11

Sì, il blocco finale verrà eseguito. Gli errori di asserzione di Junit sono solo normali Eccezioni, quindi funzionerà il solito schema java try-catch-finally. (puoi anche prendere l'Eccezione se lo desideri)

+1

Grazie. Testato e se funziona. –

1

Sì. Infine i blocchi sono pensati per essere un contenitore per il codice che sparano a prescindere da cosa. JUnit, o questo esempio, non è diverso.