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
Modifier and TypeClassDescriptionprotected static final class
A Bean registration to be applied when the context loaded.protected static final class
-
Constructor Summary
ModifierConstructorDescriptionprotected
AbstractApplicationContextRunner
(Supplier<C> contextFactory, Function<AbstractApplicationContextRunner.RunnerConfiguration<C>, SELF> instanceFactory) Create a newAbstractApplicationContextRunner
instance.protected
AbstractApplicationContextRunner
(AbstractApplicationContextRunner.RunnerConfiguration<C> configuration, Function<AbstractApplicationContextRunner.RunnerConfiguration<C>, SELF> instanceFactory) Create a newAbstractApplicationContextRunner
instance. -
Method Summary
Modifier and TypeMethodDescriptionprepare
(ContextConsumer<? super A> consumer) Prepare a newApplicationContext
based on the current state of this loader.run
(ContextConsumer<? super A> consumer) Create and refresh a newApplicationContext
based 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> SELF
Register the specified user bean with theApplicationContext
.<T> SELF
withBean
(Class<T> type, Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register the specified user bean with theApplicationContext
.<T> SELF
Register the specified user bean with theApplicationContext
.<T> SELF
withBean
(String name, Class<T> type, Supplier<T> supplier, BeanDefinitionCustomizer... customizers) Register the specified user bean with theApplicationContext
.withClassLoader
(ClassLoader classLoader) Customize theClassLoader
that theApplicationContext
should use for resource loading and bean class loading.withConfiguration
(Configurations configurations) Register the specified configuration classes with theApplicationContext
.withInitializer
(ApplicationContextInitializer<? super C> initializer) Add anApplicationContextInitializer
to be called when the context is created.withParent
(ApplicationContext parent) Configure theparent
of theApplicationContext
.withPropertyValues
(String... pairs) Add the specifiedEnvironment
property pairs.withSystemProperties
(String... pairs) Add the specifiedSystem
property 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 newAbstractApplicationContextRunner
instance.- 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 newAbstractApplicationContextRunner
instance.- 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 anApplicationContextInitializer
to be called when the context is created.- Parameters:
initializer
- the initializer to add- Returns:
- a new instance with the updated initializers
-
withPropertyValues
Add the specifiedEnvironment
property 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 specifiedSystem
property pairs. Key-value pairs can be specified with colon (":") or equals ("=") separators. System properties are added before the context isrun
and 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 theClassLoader
that theApplicationContext
should 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 theparent
of 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 configuredBeanNameGenerator
on 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 benull
or 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 ornull
to 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 benull
or 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 configuredBeanNameGenerator
on 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 configuredBeanNameGenerator
on 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 ornull
to 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 newApplicationContext
based on the current state of this loader. The context is consumed by the specifiedconsumer
and closed upon completion.- Parameters:
consumer
- the consumer of the createdApplicationContext
- Returns:
- this instance
-
prepare
Prepare a newApplicationContext
based on the current state of this loader. The context is consumed by the specifiedconsumer
and closed upon completion. Unlikerun(ContextConsumer)
, this method does not refresh the consumed context.- Parameters:
consumer
- the consumer of the createdApplicationContext
- Returns:
- this instance
- Since:
- 3.0.0
-