OutputCaptureExtension
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