OutputCaptureExtension

open class OutputCaptureExtension : BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, ParameterResolver

JUnit Jupiter @Extension to capture System.out and System.err. Can be registered for an entire test class or for an individual test method through @ExtendWith. This extension provides parameter resolution for a CapturedOutput instance which can be used to assert that the correct output was written.

To use with @ExtendWith, inject the CapturedOutput as an argument to your test class constructor, test method, or lifecycle methods:

@ExtendWith(OutputCaptureExtension.class)
class MyTest {

    @Test
    void test(CapturedOutput output) {
        System.out.println("ok");
        assertThat(output).contains("ok");
        System.err.println("error");
    }

    @AfterEach
    void after(CapturedOutput output) {
        assertThat(output.getOut()).contains("ok");
        assertThat(output.getErr()).contains("error");
    }

}

To ensure that their output can be captured, Java Util Logging (JUL) and Log4j2 require additional configuration.

To reliably capture output from Java Util Logging, reset its configuration after each test:

@AfterEach
void reset() throws Exception {
    LogManager.getLogManager().readConfiguration();
}

To reliably capture output from Log4j2, set the follow attribute of the console appender to true:

<Appenders>
    <Console name="Console" target="SYSTEM_OUT" follow="true">
        ...
    </Console>
 </Appenders>

Author

Madhura Bhave

Phillip Webb

Andy Wilkinson

Sam Brannen

Since

2.2.0

See also

Functions

Link copied to clipboard
open fun afterAll(context: ExtensionContext)
Link copied to clipboard
open fun afterEach(context: ExtensionContext)
Link copied to clipboard
open fun beforeAll(context: ExtensionContext)
Link copied to clipboard
open fun beforeEach(context: ExtensionContext)
Link copied to clipboard
open fun resolveParameter(parameterContext: ParameterContext, extensionContext: ExtensionContext): Any
Link copied to clipboard
open fun supportsParameter(parameterContext: ParameterContext, extensionContext: ExtensionContext): Boolean