Ensure @ContextHierarchy is never used with UseMainMethod
Fixes gh-33078
This commit is contained in:
parent
b9e57c73b5
commit
fafbefa35c
|
|
@ -149,6 +149,8 @@ public class SpringBootContextLoader extends AbstractContextLoader implements Ao
|
||||||
if (useMainMethod == UseMainMethod.NEVER) {
|
if (useMainMethod == UseMainMethod.NEVER) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Assert.state(mergedConfig.getParent() == null,
|
||||||
|
() -> "UseMainMethod.%s cannot be used with @ContextHierarchy tests".formatted(useMainMethod));
|
||||||
Class<?> springBootConfiguration = Arrays.stream(mergedConfig.getClasses())
|
Class<?> springBootConfiguration = Arrays.stream(mergedConfig.getClasses())
|
||||||
.filter(this::isSpringBootConfiguration).findFirst().orElse(null);
|
.filter(this::isSpringBootConfiguration).findFirst().orElse(null);
|
||||||
Assert.state(springBootConfiguration != null || useMainMethod == UseMainMethod.WHEN_AVAILABLE,
|
Assert.state(springBootConfiguration != null || useMainMethod == UseMainMethod.WHEN_AVAILABLE,
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,8 @@ import org.springframework.core.env.PropertySource;
|
||||||
import org.springframework.core.env.StandardEnvironment;
|
import org.springframework.core.env.StandardEnvironment;
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
import org.springframework.test.context.ApplicationContextFailureProcessor;
|
import org.springframework.test.context.ApplicationContextFailureProcessor;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.ContextHierarchy;
|
||||||
import org.springframework.test.context.MergedContextConfiguration;
|
import org.springframework.test.context.MergedContextConfiguration;
|
||||||
import org.springframework.test.context.TestContext;
|
import org.springframework.test.context.TestContext;
|
||||||
import org.springframework.test.context.TestContextManager;
|
import org.springframework.test.context.TestContextManager;
|
||||||
|
|
@ -232,6 +234,14 @@ class SpringBootContextLoaderTests {
|
||||||
assertThat(ContextLoaderApplicationContextFailureProcessor.failedContext).isNotNull();
|
assertThat(ContextLoaderApplicationContextFailureProcessor.failedContext).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenUseMainMethodWithContextHierarchyThrowsException() {
|
||||||
|
TestContext testContext = new ExposedTestContextManager(UseMainMethodWithContextHierarchy.class)
|
||||||
|
.getExposedTestContext();
|
||||||
|
assertThatIllegalStateException().isThrownBy(testContext::getApplicationContext).havingCause()
|
||||||
|
.withMessage("UseMainMethod.ALWAYS cannot be used with @ContextHierarchy tests");
|
||||||
|
}
|
||||||
|
|
||||||
private String[] getActiveProfiles(Class<?> testClass) {
|
private String[] getActiveProfiles(Class<?> testClass) {
|
||||||
TestContext testContext = new ExposedTestContextManager(testClass).getExposedTestContext();
|
TestContext testContext = new ExposedTestContextManager(testClass).getExposedTestContext();
|
||||||
ApplicationContext applicationContext = testContext.getApplicationContext();
|
ApplicationContext applicationContext = testContext.getApplicationContext();
|
||||||
|
|
@ -349,6 +359,13 @@ class SpringBootContextLoaderTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SpringBootTest(useMainMethod = UseMainMethod.ALWAYS)
|
||||||
|
@ContextHierarchy({ @ContextConfiguration(classes = ConfigWithMain.class),
|
||||||
|
@ContextConfiguration(classes = AnotherConfigWithMain.class) })
|
||||||
|
static class UseMainMethodWithContextHierarchy {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
static class Config {
|
static class Config {
|
||||||
|
|
||||||
|
|
@ -363,6 +380,15 @@ class SpringBootContextLoaderTests {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SpringBootConfiguration(proxyBeanMethods = false)
|
||||||
|
public static class AnotherConfigWithMain {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
new SpringApplication(AnotherConfigWithMain.class).run("--spring.profiles.active=anotherfrommain");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@SpringBootConfiguration(proxyBeanMethods = false)
|
@SpringBootConfiguration(proxyBeanMethods = false)
|
||||||
static class ConfigWithNoMain {
|
static class ConfigWithNoMain {
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue