diff --git a/spring-test/src/main/java/org/springframework/test/context/TestContextAnnotationUtils.java b/spring-test/src/main/java/org/springframework/test/context/TestContextAnnotationUtils.java index f4289f4cd1..1f591cac02 100644 --- a/spring-test/src/main/java/org/springframework/test/context/TestContextAnnotationUtils.java +++ b/spring-test/src/main/java/org/springframework/test/context/TestContextAnnotationUtils.java @@ -75,6 +75,7 @@ public abstract class TestContextAnnotationUtils { private static final ConcurrentLruCache, EnclosingConfiguration> cachedEnclosingConfigurationModes = new ConcurrentLruCache<>(32, TestContextAnnotationUtils::lookUpEnclosingConfiguration); + private static EnclosingConfiguration defaultEnclosingConfigurationMode; /** * Find the first annotation of the specified {@code annotationType} within @@ -383,6 +384,10 @@ public abstract class TestContextAnnotationUtils { return (ClassUtils.isInnerClass(clazz) && getEnclosingConfiguration(clazz) == EnclosingConfiguration.INHERIT); } + + static void clearCaches() { + defaultEnclosingConfigurationMode = null; + } /** * Get the {@link EnclosingConfiguration} mode for the supplied class. @@ -405,9 +410,13 @@ public abstract class TestContextAnnotationUtils { } private static EnclosingConfiguration getDefaultEnclosingConfigurationMode() { - String value = SpringProperties.getProperty(NestedTestConfiguration.ENCLOSING_CONFIGURATION_PROPERTY_NAME); - EnclosingConfiguration enclosingConfigurationMode = EnclosingConfiguration.from(value); - return (enclosingConfigurationMode != null ? enclosingConfigurationMode : EnclosingConfiguration.INHERIT); + if (defaultEnclosingConfigurationMode == null) { + String value = SpringProperties.getProperty(NestedTestConfiguration.ENCLOSING_CONFIGURATION_PROPERTY_NAME); + EnclosingConfiguration enclosingConfigurationMode = EnclosingConfiguration.from(value); + defaultEnclosingConfigurationMode = + (enclosingConfigurationMode != null ? enclosingConfigurationMode : EnclosingConfiguration.INHERIT); + } + return defaultEnclosingConfigurationMode; } private static void assertNonEmptyAnnotationTypeArray(Class[] annotationTypes, String message) { diff --git a/spring-test/src/test/java/org/springframework/test/context/TestContextAnnotationUtilsTests.java b/spring-test/src/test/java/org/springframework/test/context/TestContextAnnotationUtilsTests.java index 5f4f0d5e5f..1a07a2c402 100644 --- a/spring-test/src/test/java/org/springframework/test/context/TestContextAnnotationUtilsTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/TestContextAnnotationUtilsTests.java @@ -23,6 +23,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -54,6 +55,11 @@ class TestContextAnnotationUtilsTests { @Nested @DisplayName("searchEnclosingClass() tests") class SearchEnclosingClassTests { + + @BeforeEach + void clearCaches() { + TestContextAnnotationUtils.clearCaches(); + } @AfterEach void clearGlobalFlag() {