0
0
JUnittesting~10 mins

Execution order of lifecycle methods in JUnit - Test Execution Trace

Choose your learning style9 modes available
Test Overview

This test demonstrates the order in which JUnit lifecycle methods run. It verifies that methods annotated with @BeforeAll run once before all tests, @BeforeEach runs before each test, @Test methods run as tests, @AfterEach runs after each test, and @AfterAll runs once after all tests.

Test Code - JUnit 5
JUnit
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class LifecycleOrderTest {

    static StringBuilder log = new StringBuilder();

    @BeforeAll
    static void beforeAll() {
        log.append("beforeAll-");
    }

    @BeforeEach
    void beforeEach() {
        log.append("beforeEach-");
    }

    @Test
    void testOne() {
        log.append("testOne-");
        assertTrue(true);
    }

    @Test
    void testTwo() {
        log.append("testTwo-");
        assertTrue(true);
    }

    @AfterEach
    void afterEach() {
        log.append("afterEach-");
    }

    @AfterAll
    static void afterAll() {
        log.append("afterAll");
        // Verify the full expected order
        String expected = "beforeAll-beforeEach-testOne-afterEach-beforeEach-testTwo-afterEach-afterAll";
        assertTrue(log.toString().equals(expected));
    }
}
Execution Trace - 8 Steps
StepActionSystem StateAssertionResult
1JUnit framework calls @BeforeAll static methodNo tests run yet, log is empty-PASS
2JUnit runs first test: calls @BeforeEach methodlog contains 'beforeAll-'-PASS
3JUnit runs first test method testOne()log contains 'beforeAll-beforeEach-'assertTrue(true) in testOnePASS
4JUnit calls @AfterEach method after testOnelog contains 'beforeAll-beforeEach-testOne-'-PASS
5JUnit runs second test: calls @BeforeEach methodlog contains 'beforeAll-beforeEach-testOne-afterEach-'-PASS
6JUnit runs second test method testTwo()log contains 'beforeAll-beforeEach-testOne-afterEach-beforeEach-'assertTrue(true) in testTwoPASS
7JUnit calls @AfterEach method after testTwolog contains 'beforeAll-beforeEach-testOne-afterEach-beforeEach-testTwo-'-PASS
8JUnit calls @AfterAll static method after all testslog contains 'beforeAll-beforeEach-testOne-afterEach-beforeEach-testTwo-afterEach-'assertTrue(log.toString().equals(expected))PASS
Failure Scenario
Failing Condition: The lifecycle methods do not run in the expected order or a test assertion fails
Execution Trace Quiz - 3 Questions
Test your understanding
Which lifecycle method runs only once before all tests?
A@AfterEach
B@BeforeAll
C@BeforeEach
D@AfterAll
Key Result
Use lifecycle methods to set up and clean up tests in a clear order. Verifying their execution order helps ensure tests run predictably and resources are managed properly.