Browse Source

Merge pull request #45268 from nosan

* pr/45268:
  Polish 'Introduce 'spring.test.print-condition-evaluation-report' property'
  Introduce 'spring.test.print-condition-evaluation-report' property

Closes gh-45268
pull/45286/head
Phillip Webb 9 months ago
parent
commit
1d67e529b2
  1. 11
      spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/OnFailureConditionReportContextCustomizerFactory.java
  2. 6
      spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring-configuration-metadata.json
  3. 40
      spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/OnFailureConditionReportContextCustomizerFactoryTests.java

11
spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/OnFailureConditionReportContextCustomizerFactory.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2012-2024 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -84,7 +84,14 @@ class OnFailureConditionReportContextCustomizerFactory implements ContextCustomi @@ -84,7 +84,14 @@ class OnFailureConditionReportContextCustomizerFactory implements ContextCustomi
@Override
public void onApplicationEvent(ApplicationFailedEvent event) {
System.err.println(new ConditionEvaluationReportMessage(this.reportSupplier.get()));
if (shouldPrintReport(event.getApplicationContext())) {
System.err.println(new ConditionEvaluationReportMessage(this.reportSupplier.get()));
}
}
private static boolean shouldPrintReport(ConfigurableApplicationContext context) {
return (context == null) || context.getEnvironment()
.getProperty("spring.test.print-condition-evaluation-report", Boolean.class, true);
}
}

6
spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring-configuration-metadata.json

@ -17,6 +17,12 @@ @@ -17,6 +17,12 @@
"type": "java.lang.Boolean",
"description": "Whether observability should be auto-configured in tests.",
"defaultValue": "false"
},
{
"name": "spring.test.print-condition-evaluation-report",
"type": "java.lang.Boolean",
"description": "Whether the condition evaluation report should be printed when the ApplicationContext fails to start.",
"defaultValue": "true"
}
]
}

40
spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/OnFailureConditionReportContextCustomizerFactoryTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2012-2024 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
package org.springframework.boot.test.autoconfigure;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ -24,9 +25,13 @@ import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; @@ -24,9 +25,13 @@ import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.boot.testsupport.classpath.resources.WithResource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.TestContextManager;
import org.springframework.test.context.cache.ContextCache;
import org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate;
import org.springframework.test.util.ReflectionTestUtils;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
@ -39,11 +44,42 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException; @@ -39,11 +44,42 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
@ExtendWith(OutputCaptureExtension.class)
class OnFailureConditionReportContextCustomizerFactoryTests {
@BeforeEach
void clearCache() {
ContextCache contextCache = (ContextCache) ReflectionTestUtils
.getField(DefaultCacheAwareContextLoaderDelegate.class, "defaultContextCache");
if (contextCache != null) {
contextCache.reset();
}
}
@Test
void loadFailureShouldPrintReport(CapturedOutput output) {
load();
assertThat(output.getErr()).contains("JacksonAutoConfiguration matched");
assertThat(output).contains("Error creating bean with name 'faultyBean'");
}
@Test
@WithResource(name = "application.xml", content = "invalid xml")
void loadFailureShouldNotPrintReportWhenApplicationPropertiesIsBroken(CapturedOutput output) {
load();
assertThat(output).doesNotContain("JacksonAutoConfiguration matched")
.doesNotContain("Error creating bean with name 'faultyBean'")
.contains("java.util.InvalidPropertiesFormatException");
}
@Test
@WithResource(name = "application.properties", content = "spring.test.print-condition-evaluation-report=false")
void loadFailureShouldNotPrintReportWhenDisabled(CapturedOutput output) {
load();
assertThat(output).doesNotContain("JacksonAutoConfiguration matched")
.contains("Error creating bean with name 'faultyBean'");
}
private void load() {
assertThatIllegalStateException()
.isThrownBy(() -> new TestContextManager(FailingTests.class).getTestContext().getApplicationContext());
assertThat(output).contains("JacksonAutoConfiguration matched");
}
@SpringBootTest

Loading…
Cancel
Save