Split up JUnit 5 OutputCapture class

Split the JUnit 5 `OutputCapture` class into separate `OutputExtension`
and `CapturedOutput` classes. The JUnit 5 callback methods are now
contained only in the `OutputExtension` class so no longer pollute the
public API that users will interact with.

The `CapturedOutput` class has also been updated to capture System.err
and System.out separately to allow distinct assertions if required.

Closes gh-17029
This commit is contained in:
Phillip Webb
2019-05-30 21:51:07 -07:00
parent 68a3fbd7a0
commit d11d5ceb29
49 changed files with 761 additions and 313 deletions

View File

@@ -21,7 +21,8 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -34,7 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleActiveMqTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Autowired
private Producer producer;

View File

@@ -26,7 +26,8 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.test.web.servlet.MockMvc;
import static org.assertj.core.api.Assertions.assertThat;
@@ -49,7 +50,7 @@ class SampleActuatorLog4J2ApplicationTests {
.getLogger(SampleActuatorLog4J2ApplicationTests.class);
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Autowired
private MockMvc mvc;

View File

@@ -21,7 +21,8 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -34,7 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleAopApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
private String profiles;

View File

@@ -20,14 +20,15 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
class SampleBatchApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testDefaultSettings() {

View File

@@ -25,7 +25,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.TestExecutionListeners.MergeMode;
@@ -36,14 +37,14 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
@TestExecutionListeners(mergeMode = MergeMode.MERGE_WITH_DEFAULTS,
listeners = { OrderedCassandraTestExecutionListener.class })
@ExtendWith(OutputCapture.class)
@ExtendWith(OutputExtension.class)
@SpringBootTest
@CassandraDataSet(keyspace = "mykeyspace", value = "setup.cql")
@EmbeddedCassandra(timeout = 60000)
class SampleCassandraApplicationTests {
@Test
void testDefaultSettings(OutputCapture output) {
void testDefaultSettings(CapturedOutput output) {
Assumptions.assumeFalse(this::runningOnWindows);
assertThat(output).contains("firstName='Alice', lastName='Smith'");
}

View File

@@ -21,7 +21,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.core.NestedCheckedException;
import static org.assertj.core.api.Assertions.assertThat;
@@ -29,7 +30,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleCouchbaseApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testDefaultSettings() {

View File

@@ -21,7 +21,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -33,7 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleElasticsearchApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testDefaultSettings() {

View File

@@ -20,7 +20,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -29,12 +30,12 @@ import static org.assertj.core.api.Assertions.assertThat;
*
* @author Phillip Webb
*/
@ExtendWith(OutputCapture.class)
@ExtendWith(OutputExtension.class)
@SpringBootTest
class SampleLdapApplicationTests {
@Test
void testDefaultSettings(OutputCapture output) {
void testDefaultSettings(CapturedOutput output) {
assertThat(output).contains("cn=Alice Smith");
}

View File

@@ -20,7 +20,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -30,12 +31,12 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Dave Syer
* @author Andy Wilkinson
*/
@ExtendWith(OutputCapture.class)
@ExtendWith(OutputExtension.class)
@SpringBootTest
class SampleMongoApplicationTests {
@Test
void testDefaultSettings(OutputCapture output) {
void testDefaultSettings(CapturedOutput output) {
assertThat(output).contains("firstName='Alice', lastName='Smith'");
}

View File

@@ -20,7 +20,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.neo4j.driver.v1.exceptions.ServiceUnavailableException;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -32,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleNeo4jApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testDefaultSettings() {

View File

@@ -19,7 +19,8 @@ package sample.data.redis;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.data.redis.RedisConnectionFailureException;
import static org.assertj.core.api.Assertions.assertThat;
@@ -32,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleRedisApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testDefaultSettings() {

View File

@@ -19,7 +19,8 @@ package sample.data.solr;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.core.NestedCheckedException;
import static org.assertj.core.api.Assertions.assertThat;
@@ -27,7 +28,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleSolrApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testDefaultSettings() throws Exception {

View File

@@ -19,7 +19,8 @@ package sample.jooq;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -31,7 +32,7 @@ class SampleJooqApplicationTests {
private static final String[] NO_ARGS = {};
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void outputResults() {

View File

@@ -20,7 +20,8 @@ import org.assertj.core.api.Condition;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -32,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleAtomikosApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testTransactionRollback() throws Exception {

View File

@@ -22,7 +22,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.context.ApplicationContext;
import static org.assertj.core.api.Assertions.assertThat;
@@ -35,7 +36,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleBitronixApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testTransactionRollback() throws Exception {

View File

@@ -21,7 +21,8 @@ import java.net.ConnectException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.core.NestedCheckedException;
import static org.assertj.core.api.Assertions.assertThat;
@@ -29,7 +30,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleLiquibaseApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testDefaultSettings() throws Exception {

View File

@@ -19,14 +19,15 @@ package sample.logback;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
class SampleLogbackApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testLoadedCustomLogbackConfig() throws Exception {

View File

@@ -21,14 +21,15 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
class SampleProfileApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
private String profiles;

View File

@@ -20,7 +20,8 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.context.ConfigurableApplicationContext;
import static org.assertj.core.api.Assertions.assertThat;
@@ -33,7 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleQuartzApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void quartzJobIsTriggered() throws InterruptedException {

View File

@@ -21,7 +21,8 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -34,7 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleSimpleApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
private String profiles;

View File

@@ -27,7 +27,8 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.ws.client.core.WebServiceTemplate;
@@ -37,7 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class SampleWsApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
private WebServiceTemplate webServiceTemplate = new WebServiceTemplate();

View File

@@ -19,14 +19,15 @@ package sample.xml;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.boot.test.extension.OutputCapture;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import static org.assertj.core.api.Assertions.assertThat;
class SampleSpringXmlApplicationTests {
@RegisterExtension
OutputCapture output = new OutputCapture();
CapturedOutput output = OutputExtension.capture();
@Test
void testDefaultSettings() throws Exception {