Будет ли блок «наконец» срабатывать даже после того, как тест Junit выдаст ошибку утверждения из блока «попробовать»?

Будет ли метод writer.close() внутри блока finally { } работать при ошибке утверждения Junit?

Предположим, следующий код:

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

Теперь блок finally() будет работать как обычный поток?


person Hari Krishna Ganji    schedule 10.11.2014    source источник
comment
возможный дубликат Понимание try catch finally с возвратом   -  person StackFlowed    schedule 10.11.2014
comment
Извините, я понимаю классическую попытку, поймать и, наконец, потечь. Этот вопрос отличается в том смысле, что он связан с тестовым потоком Junit.   -  person Hari Krishna Ganji    schedule 10.11.2014


Ответы (2)


Да, блок finally будет работать. Ошибки утверждения Junit являются обычными исключениями, поэтому обычный шаблон try-catch-finally java будет работать. Вы даже можете поймать исключение AssertionError, если хотите.

person dkatzel    schedule 10.11.2014

да. Наконец, блоки предназначены для того, чтобы быть контейнером для кода, который срабатывает несмотря ни на что. JUnit или этот пример ничем не отличается.

person Drew Kennedy    schedule 10.11.2014