0
0
JUnittesting~10 mins

TestWatcher for reporting in JUnit - Test Execution Trace

Choose your learning style9 modes available
Test Overview

This test uses JUnit's TestWatcher to report test success and failure events. It verifies that the test lifecycle events are logged correctly.

Test Code - JUnit 5
JUnit
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.TestWatcher;
import org.junit.jupiter.api.extension.ExtensionContext;
import java.util.Optional;

class ReportingTestWatcher implements TestWatcher {
    @Override
    public void testSuccessful(ExtensionContext context) {
        System.out.println("Test succeeded: " + context.getDisplayName());
    }

    @Override
    public void testFailed(ExtensionContext context, Throwable cause) {
        System.out.println("Test failed: " + context.getDisplayName() + ", reason: " + cause.getMessage());
    }

    @Override
    public void testDisabled(ExtensionContext context, Optional<String> reason) {
        System.out.println("Test disabled: " + context.getDisplayName() + ", reason: " + reason.orElse("No reason"));
    }

    @Override
    public void testAborted(ExtensionContext context, Throwable cause) {
        System.out.println("Test aborted: " + context.getDisplayName() + ", reason: " + cause.getMessage());
    }
}

@ExtendWith(ReportingTestWatcher.class)
public class SampleTest {

    @Test
    void testSuccess() {
        // This test will pass
        int sum = 2 + 3;
        org.junit.jupiter.api.Assertions.assertEquals(5, sum);
    }

    @Test
    void testFailure() {
        // This test will fail
        int diff = 5 - 3;
        org.junit.jupiter.api.Assertions.assertEquals(1, diff);
    }
}
Execution Trace - 5 Steps
StepActionSystem StateAssertionResult
1Test runner starts and applies ReportingTestWatcher extensionJUnit test environment initialized with TestWatcher extension-PASS
2Runs testSuccess methodExecuting testSuccess: calculates sum 2 + 3Assert sum equals 5PASS
3TestWatcher logs success message for testSuccessConsole output: 'Test succeeded: testSuccess()'Verify success log message printedPASS
4Runs testFailure methodExecuting testFailure: calculates diff 5 - 3Assert diff equals 1FAIL
5TestWatcher logs failure message for testFailureConsole output: 'Test failed: testFailure(), reason: expected:<1> but was:<2>'Verify failure log message printed with correct reasonPASS
Failure Scenario
Failing Condition: Assertion in testFailure does not match actual result
Execution Trace Quiz - 3 Questions
Test your understanding
What does the TestWatcher do when a test passes?
APrints 'Test succeeded' with test name
BThrows an exception
CSkips the test
DDoes nothing
Key Result
Using TestWatcher helps track and report test lifecycle events clearly, improving test diagnostics and reporting.