2014-11-10 19 views
9

Czy metoda writer.close() w bloku finally { } działa w przypadku błędu asemblacji Junit?Czy blokada "w końcu", nawet po teście Junit, spowoduje zgłoszenie błędu asercji z argumentem "try"?

Przyjmijmy następujący kod:

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

Teraz będzie prowadzony finally() blok jak zwykły przepływ?

+2

Tak, powinno zostać wykonane. –

+0

możliwy duplikat [Understanding try catch finally with return] (http://stackoverflow.com/questions/26658853/understanding-try-catch-finally-with-return) – StackFlowed

+0

Przepraszam, rozumiem klasyczną próbę, złap i wreszcie przepłyń . To pytanie różni się w tym sensie, że związany jest z nim test testowy Junit. –

Odpowiedz

11

Tak, blok finally zostanie uruchomiony. Błędy asercji Junit są po prostu normalnymi wyjątkami, więc zwykle działa wzór java try-catch-finally. (Możesz nawet złapać wyjątek, jeśli chcesz)

+1

Dzięki. Testowane i działa. –

1

Tak. W końcu bloki mają być pojemnikiem na kod, który strzela bez względu na wszystko. JUnit, lub ten przykład, nie jest inny.