即使 Junit 测试从中抛出断言错误,“最终”块也会触发吗?

2022-09-02 21:17:24

块中的方法是否会在 Junit 断言错误上运行?writer.close()finally { }

假定以下代码:

@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()


答案 1

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


答案 2

是的。最后,块应该是无论如何都会触发的代码的容器。JUnit 或此示例也不例外。


推荐