title: What order are the Junit @Before/@After called?
body: <p>I have an Integration Test Suite. I have a <code>IntegrationTestBase</code> class for all my tests to extend. This base class has a <code>@Before</code> (<code>public void setUp()</code>) and <code>@After</code> (<code>public void tearDown()</code>) method to establish API and DB connections. What I've been doing is just overriding those two methods in each testcase and calling <code>super.setUp()</code> and <code>super.tearDown()</code>. However this can cause problems if someone forgets to call the super or puts them at the wrong place and an exception is thrown and they forget to call super in the finally or something.</p>
  
  <p>What I want to do is make the <code>setUp</code> and <code>tearDown</code> methods on the base class <code>final</code> and then just add our own annotated <code>@Before</code> and <code>@After</code> methods. Doing some initial tests it appears to always call in this order:</p>
  
  <pre><code>Base @Before
  Test @Before
  Test
  Test @After
  Base @After
  </code></pre>
  
  <p>but I'm just a little concerned that the order isn't guaranteed and that it could cause problems. I looked around and haven't seen anything on the subject. Does anyone know if I can do that and not have any problems?</p>
  
  <p>Code:</p>
  
  <pre><code>public class IntegrationTestBase {
  
      @Before
      public final void setUp() { *always called 1st?* }
  
      @After
      public final void tearDown() { *always called last?* }
  }
  
  
  public class MyTest extends IntegrationTestBase {
  
      @Before
      public final void before() { *always called 2nd?* }
  
      @Test
      public void test() { *always called 3rd?* }
  
      @After
      public final void after() { *always called 4th?* }
  }
  </code></pre>