public class OutputCaptureExtension extends Object implements org.junit.jupiter.api.extension.BeforeAllCallback, org.junit.jupiter.api.extension.AfterAllCallback, org.junit.jupiter.api.extension.BeforeEachCallback, org.junit.jupiter.api.extension.AfterEachCallback, org.junit.jupiter.api.extension.ParameterResolver
@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>
CapturedOutput
Modifier and Type | Method and Description |
---|---|
void |
afterAll(org.junit.jupiter.api.extension.ExtensionContext context) |
void |
afterEach(org.junit.jupiter.api.extension.ExtensionContext context) |
void |
beforeAll(org.junit.jupiter.api.extension.ExtensionContext context) |
void |
beforeEach(org.junit.jupiter.api.extension.ExtensionContext context) |
Object |
resolveParameter(org.junit.jupiter.api.extension.ParameterContext parameterContext,
org.junit.jupiter.api.extension.ExtensionContext extensionContext) |
boolean |
supportsParameter(org.junit.jupiter.api.extension.ParameterContext parameterContext,
org.junit.jupiter.api.extension.ExtensionContext extensionContext) |
public void beforeAll(org.junit.jupiter.api.extension.ExtensionContext context) throws Exception
beforeAll
in interface org.junit.jupiter.api.extension.BeforeAllCallback
Exception
public void afterAll(org.junit.jupiter.api.extension.ExtensionContext context) throws Exception
afterAll
in interface org.junit.jupiter.api.extension.AfterAllCallback
Exception
public void beforeEach(org.junit.jupiter.api.extension.ExtensionContext context) throws Exception
beforeEach
in interface org.junit.jupiter.api.extension.BeforeEachCallback
Exception
public void afterEach(org.junit.jupiter.api.extension.ExtensionContext context) throws Exception
afterEach
in interface org.junit.jupiter.api.extension.AfterEachCallback
Exception
public boolean supportsParameter(org.junit.jupiter.api.extension.ParameterContext parameterContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws org.junit.jupiter.api.extension.ParameterResolutionException
supportsParameter
in interface org.junit.jupiter.api.extension.ParameterResolver
org.junit.jupiter.api.extension.ParameterResolutionException
public Object resolveParameter(org.junit.jupiter.api.extension.ParameterContext parameterContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
resolveParameter
in interface org.junit.jupiter.api.extension.ParameterResolver