22

Will the writer.close() method inside the finally { } block run on an Junit Assertion Error?

Assume the following 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?
    }
 }

Now will the finally() block run just like a regular flow?

Hari Krishna Ganji
  • 1,647
  • 2
  • 20
  • 33
  • possible duplicate of [Understanding try catch finally with return](http://stackoverflow.com/questions/26658853/understanding-try-catch-finally-with-return) – StackFlowed Nov 10 '14 at 15:35
  • 1
    Sorry, I understand the classic try, catch and finally flow. This question is different in the sense its related Junit test flow. – Hari Krishna Ganji Nov 10 '14 at 15:38

2 Answers2

24

Yes, the finally block will run. Junit assertion errors are just normal exceptions so the usual java try-catch-finally pattern will work. You can even catch the AssertionError exception if you wanted.

dkatzel
  • 31,188
  • 3
  • 63
  • 67
3

Yes. Finally blocks are meant to be a container for code that fire no matter what. JUnit, or this example, is no different.

Drew Kennedy
  • 4,118
  • 4
  • 24
  • 34