17

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()块会像常规流程一样运行吗?

4

2 回答 2

21

是的,该finally块将运行。Junit 断言错误只是正常的异常,因此通常的 javatry-catch-finally模式将起作用。如果需要,您甚至可以捕获AssertionError异常。

于 2014-11-10T15:37:17.657 回答
3

是的。finally 块旨在成为无论如何都会触发的代码的容器。JUnit,或者这个例子,也不例外。

于 2014-11-10T15:47:53.173 回答