2014-11-10 9 views
9

Wird die writer.close()-Methode innerhalb des finally { } Blocks auf einem Junit-Assertionsfehler ausgeführt?Wird der "finally" -Block auch ausgelöst, nachdem ein Junit-Test einen Assertion Error aus dem "try" -Block geworfen hat?

Angenommen, den folgenden Code:

@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? 
    } 
} 

wird nun der finally() Block laufen wie eine normale Strömung?

+2

Ja, es sollte ausgeführt werden. –

+0

möglich Duplikat von [Understanding versuchen Fang endlich mit der Rückkehr] (http://stackoverflow.com/questions/26658853/understanding-try-catch-finally-with-return) – StackFlowed

+0

Sorry, ich verstehe den klassischen Versuch, fangen und schließlich fließen . Diese Frage ist im Sinne des zugehörigen Junit-Testablaufs unterschiedlich. –

Antwort

11

Ja, der finally-Block wird ausgeführt. Junit-Assertionsfehler sind nur normale Ausnahmen, daher wird das übliche Java-try-catch-finally-Muster funktionieren. (Sie können sogar die Ausnahme fangen, wenn Sie wollten)

+1

Danke. Getestet und funktioniert. –

1

Ja. Schließlich sollen Blöcke ein Container für Code sein, der egal was auslöst. JUnit, oder dieses Beispiel, ist nicht anders.