Class AbstractApplicationContextRunner<SELF extends AbstractApplicationContextRunner<SELF,C,A>,C extends ConfigurableApplicationContext,A extends ApplicationContextAssertProvider<C>>
- Type Parameters:
SELF- the "self" type for this runnerC- the context typeA- the application context assertion provider
- Direct Known Subclasses:
ApplicationContextRunner,ReactiveWebApplicationContextRunner,WebApplicationContextRunner
ApplicationContext and provide AssertJ style
assertions. The test is best used as a field of a test class, describing the shared
configuration required for the test:
public class MyContextTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withPropertyValues("spring.foo=bar")
.withUserConfiguration(MyConfiguration.class);
}
The initialization above makes sure to register MyConfiguration for all tests
and set the spring.foo property to bar unless specified otherwise.
Based on the configuration above, a specific test can simulate what will happen when the context runs, perhaps with overridden property values:
@Test
public someTest() {
this.contextRunner.withPropertyValues("spring.foo=biz").run((context) -> {
assertThat(context).containsSingleBean(MyBean.class);
// other assertions
});
}
The test above has changed the spring.foo property to biz and is
asserting that the context contains a single MyBean bean. The
run method takes a ContextConsumer that can apply
assertions to the context. Upon completion, the context is automatically closed.
If the application context fails to start the #run(ContextConsumer) method is
called with a "failed" application context. Calls to the context will throw an
IllegalStateException and assertions that expect a running context will fail.
The getFailure() assertion can be used if
further checks are required on the cause of the failure:
@Test
public someTest() {
this.context.withPropertyValues("spring.foo=fails").run((loaded) -> {
assertThat(loaded).getFailure().hasCauseInstanceOf(BadPropertyException.class);
// other assertions
});
}
- Since:
- 2.0.0
- Author:
- Stephane Nicoll, Andy Wilkinson, Phillip Webb
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static final classA Bean registration to be applied when the context loaded.protected static final class -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractApplicationContextRunner(Supplier<C> contextFactory, Function<AbstractApplicationContextRunner.RunnerConfiguration<C>, SELF> instanceFactory) Create a newAbstractApplicationContextRunnerinstance.protectedAbstractApplicationContextRunner(AbstractApplicationContextRunner.RunnerConfiguration<C> configuration, Function<AbstractApplicationContextRunner.RunnerConfiguration<C>, SELF> instanceFactory) Create a newAbstractApplicationContextRunnerinstance. -
Method Summary
Modifier and TypeMethodDescriptionrun(ContextConsumer<? super A> consumer) Create and refresh a newApplicationContextbased on the current state of this loader.Apply customization to this runner.withAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding) Specify if bean definition overriding, by registering a definition with the same name as an existing definition, should be allowed.withAllowCircularReferences(boolean allowCircularReferences) Specify if circular references between beans should be allowed.<T> SELFRegister the specified user bean with theApplicationContext.<T> SELFwithBean(Class<T> type, Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register the specified user bean with theApplicationContext.<T> SELFRegister the specified user bean with theApplicationContext.<T> SELFwithBean(String name, Class<T> type, Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register the specified user bean with theApplicationContext.withClassLoader(ClassLoader classLoader) Customize theClassLoaderthat theApplicationContextshould use for resource loading and bean class loading.withConfiguration(Configurations configurations) Register the specified configuration classes with theApplicationContext.withInitializer(ApplicationContextInitializer<? super C> initializer) Add anApplicationContextInitializerto be called when the context is created.withParent(ApplicationContext parent) Configure theparentof theApplicationContext.withPropertyValues(String... pairs) Add the specifiedEnvironmentproperty pairs.withSystemProperties(String... pairs) Add the specifiedSystemproperty pairs.withUserConfiguration(Class<?>... configurationClasses) Register the specified user configuration classes with theApplicationContext.
-
Constructor Details
-
AbstractApplicationContextRunner
protected AbstractApplicationContextRunner(Supplier<C> contextFactory, Function<AbstractApplicationContextRunner.RunnerConfiguration<C>, SELF> instanceFactory) Create a newAbstractApplicationContextRunnerinstance.- Parameters:
contextFactory- the factory used to create the actual contextinstanceFactory- the factory used to create new instance of the runner- Since:
- 2.6.0
-
AbstractApplicationContextRunner
protected AbstractApplicationContextRunner(AbstractApplicationContextRunner.RunnerConfiguration<C> configuration, Function<AbstractApplicationContextRunner.RunnerConfiguration<C>, SELF> instanceFactory) Create a newAbstractApplicationContextRunnerinstance.- Parameters:
configuration- the configuration for the runner to useinstanceFactory- the factory used to create new instance of the runner- Since:
- 2.6.0
-
-
Method Details
-
withAllowBeanDefinitionOverriding
Specify if bean definition overriding, by registering a definition with the same name as an existing definition, should be allowed.- Parameters:
allowBeanDefinitionOverriding- if bean overriding is allowed- Returns:
- a new instance with the updated bean definition overriding policy
- Since:
- 2.3.0
- See Also:
-
withAllowCircularReferences
Specify if circular references between beans should be allowed.- Parameters:
allowCircularReferences- if circular references between beans are allowed- Returns:
- a new instance with the updated circular references policy
- Since:
- 2.6.0
- See Also:
-
withInitializer
Add anApplicationContextInitializerto be called when the context is created.- Parameters:
initializer- the initializer to add- Returns:
- a new instance with the updated initializers
-
withPropertyValues
Add the specifiedEnvironmentproperty pairs. Key-value pairs can be specified with colon (":") or equals ("=") separators. Override matching keys that might have been specified previously.- Parameters:
pairs- the key-value pairs for properties that need to be added to the environment- Returns:
- a new instance with the updated property values
- See Also:
-
withSystemProperties
Add the specifiedSystemproperty pairs. Key-value pairs can be specified with colon (":") or equals ("=") separators. System properties are added before the context isrunand restored when the context is closed.- Parameters:
pairs- the key-value pairs for properties that need to be added to the system- Returns:
- a new instance with the updated system properties
- See Also:
-
withClassLoader
Customize theClassLoaderthat theApplicationContextshould use for resource loading and bean class loading.- Parameters:
classLoader- the classloader to use (can be null to use the default)- Returns:
- a new instance with the updated class loader
- See Also:
-
withParent
Configure theparentof theApplicationContext.- Parameters:
parent- the parent- Returns:
- a new instance with the updated parent
-
withBean
Register the specified user bean with theApplicationContext. The bean name is generated from the configuredBeanNameGeneratoron the underlying context.Such beans are registered after regular user configurations in the order of registration.
- Type Parameters:
T- the type of the bean- Parameters:
type- the type of the beanconstructorArgs- custom argument values to be fed into Spring's constructor resolution algorithm, resolving either all arguments or just specific ones, with the rest to be resolved through regular autowiring (may benullor empty)- Returns:
- a new instance with the updated bean
-
withBean
Register the specified user bean with theApplicationContext.Such beans are registered after regular user configurations in the order of registration.
- Type Parameters:
T- the type of the bean- Parameters:
name- the bean name ornullto use a generated nametype- the type of the beanconstructorArgs- custom argument values to be fed into Spring's constructor resolution algorithm, resolving either all arguments or just specific ones, with the rest to be resolved through regular autowiring (may benullor empty)- Returns:
- a new instance with the updated bean
-
withBean
public <T> SELF withBean(Class<T> type, Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register the specified user bean with theApplicationContext. The bean name is generated from the configuredBeanNameGeneratoron the underlying context.Such beans are registered after regular user configurations in the order of registration.
- Type Parameters:
T- the type of the bean- Parameters:
type- the type of the beansupplier- a supplier for the beancustomizers- one or more callbacks for customizing the factory'sBeanDefinition, e.g. setting a lazy-init or primary flag- Returns:
- a new instance with the updated bean
-
withBean
public <T> SELF withBean(String name, Class<T> type, Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register the specified user bean with theApplicationContext. The bean name is generated from the configuredBeanNameGeneratoron the underlying context.Such beans are registered after regular user configurations in the order of registration.
- Type Parameters:
T- the type of the bean- Parameters:
name- the bean name ornullto use a generated nametype- the type of the beansupplier- a supplier for the beancustomizers- one or more callbacks for customizing the factory'sBeanDefinition, e.g. setting a lazy-init or primary flag- Returns:
- a new instance with the updated bean
-
withUserConfiguration
Register the specified user configuration classes with theApplicationContext.- Parameters:
configurationClasses- the user configuration classes to add- Returns:
- a new instance with the updated configuration
-
withConfiguration
Register the specified configuration classes with theApplicationContext.- Parameters:
configurations- the configurations to add- Returns:
- a new instance with the updated configuration
-
with
Apply customization to this runner.- Parameters:
customizer- the customizer to call- Returns:
- a new instance with the customizations applied
-
run
Create and refresh a newApplicationContextbased on the current state of this loader. The context is consumed by the specifiedconsumerand closed upon completion.- Parameters:
consumer- the consumer of the createdApplicationContext- Returns:
- this instance
-