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) {
|
||||
return null;
|
||||
}
|
||||
Assert.state(mergedConfig.getParent() == null,
|
||||
() -> "UseMainMethod.%s cannot be used with @ContextHierarchy tests".formatted(useMainMethod));
|
||||
Class<?> springBootConfiguration = Arrays.stream(mergedConfig.getClasses())
|
||||
.filter(this::isSpringBootConfiguration).findFirst().orElse(null);
|
||||
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.test.context.ActiveProfiles;
|
||||
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.TestContext;
|
||||
import org.springframework.test.context.TestContextManager;
|
||||
|
|
@ -232,6 +234,14 @@ class SpringBootContextLoaderTests {
|
|||
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) {
|
||||
TestContext testContext = new ExposedTestContextManager(testClass).getExposedTestContext();
|
||||
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)
|
||||
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)
|
||||
static class ConfigWithNoMain {
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue