SELF
- the "self" type for this runnerC
- the context typeA
- the application context assertion providerpublic abstract class AbstractApplicationContextRunner<SELF extends AbstractApplicationContextRunner<SELF,C,A>,C extends org.springframework.context.ConfigurableApplicationContext,A extends ApplicationContextAssertProvider<C>> extends Object
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 }); }
ApplicationContextRunner
,
WebApplicationContextRunner
,
ReactiveWebApplicationContextRunner
,
ApplicationContextAssert
Modifier | Constructor and Description |
---|---|
protected |
AbstractApplicationContextRunner(Supplier<C> contextFactory)
Create a new
AbstractApplicationContextRunner instance. |
protected |
AbstractApplicationContextRunner(Supplier<C> contextFactory,
List<org.springframework.context.ApplicationContextInitializer<? super C>> initializers,
TestPropertyValues environmentProperties,
TestPropertyValues systemProperties,
ClassLoader classLoader,
org.springframework.context.ApplicationContext parent,
List<Configurations> configurations)
Create a new
AbstractApplicationContextRunner instance. |
Modifier and Type | Method and Description |
---|---|
protected abstract SELF |
newInstance(Supplier<C> contextFactory,
List<org.springframework.context.ApplicationContextInitializer<? super C>> initializers,
TestPropertyValues environmentProperties,
TestPropertyValues systemProperties,
ClassLoader classLoader,
org.springframework.context.ApplicationContext parent,
List<Configurations> configurations) |
SELF |
run(ContextConsumer<? super A> consumer)
Create and refresh a new
ApplicationContext based on the current state of
this loader. |
SELF |
with(Function<SELF,SELF> customizer)
Apply customization to this runner.
|
SELF |
withClassLoader(ClassLoader classLoader)
Customize the
ClassLoader that the ApplicationContext should use
for resource loading and bean class loading. |
SELF |
withConfiguration(Configurations configurations)
Register the specified configuration classes with the
ApplicationContext . |
SELF |
withInitializer(org.springframework.context.ApplicationContextInitializer<? super org.springframework.context.ConfigurableApplicationContext> initializer)
Add a
ApplicationContextInitializer to be called when the context is
created. |
SELF |
withParent(org.springframework.context.ApplicationContext parent)
Configure the
parent of the ApplicationContext . |
SELF |
withPropertyValues(String... pairs)
Add the specified
Environment property pairs. |
SELF |
withSystemProperties(String... pairs)
Add the specified
System property pairs. |
SELF |
withUserConfiguration(Class<?>... configurationClasses)
Register the specified user configuration classes with the
ApplicationContext . |
protected AbstractApplicationContextRunner(Supplier<C> contextFactory)
AbstractApplicationContextRunner
instance.contextFactory
- the factory used to create the actual contextprotected AbstractApplicationContextRunner(Supplier<C> contextFactory, List<org.springframework.context.ApplicationContextInitializer<? super C>> initializers, TestPropertyValues environmentProperties, TestPropertyValues systemProperties, ClassLoader classLoader, org.springframework.context.ApplicationContext parent, List<Configurations> configurations)
AbstractApplicationContextRunner
instance.contextFactory
- the factory used to create the actual contextinitializers
- the initializersenvironmentProperties
- the environment propertiessystemProperties
- the system propertiesclassLoader
- the class loaderparent
- the parentconfigurations
- the configurationpublic SELF withInitializer(org.springframework.context.ApplicationContextInitializer<? super org.springframework.context.ConfigurableApplicationContext> initializer)
ApplicationContextInitializer
to be called when the context is
created.initializer
- the initializer to addpublic SELF withPropertyValues(String... pairs)
Environment
property pairs. Key-value pairs can be
specified with colon (":") or equals ("=") separators. Override matching keys that
might have been specified previously.pairs
- the key-value pairs for properties that need to be added to the
environmentTestPropertyValues
,
withSystemProperties(String...)
public SELF withSystemProperties(String... pairs)
System
property pairs. Key-value pairs can be specified
with colon (":") or equals ("=") separators. System properties are added before the
context is run
and restored when the context is
closed.pairs
- the key-value pairs for properties that need to be added to the systemTestPropertyValues
,
withSystemProperties(String...)
public SELF withClassLoader(ClassLoader classLoader)
ClassLoader
that the ApplicationContext
should use
for resource loading and bean class loading.classLoader
- the classloader to use (can be null to use the default)FilteredClassLoader
public SELF withParent(org.springframework.context.ApplicationContext parent)
parent
of the ApplicationContext
.parent
- the parentpublic SELF withUserConfiguration(Class<?>... configurationClasses)
ApplicationContext
.configurationClasses
- the user configuration classes to addpublic SELF withConfiguration(Configurations configurations)
ApplicationContext
.configurations
- the configurations to addpublic SELF with(Function<SELF,SELF> customizer)
customizer
- the customizer to callprotected abstract SELF newInstance(Supplier<C> contextFactory, List<org.springframework.context.ApplicationContextInitializer<? super C>> initializers, TestPropertyValues environmentProperties, TestPropertyValues systemProperties, ClassLoader classLoader, org.springframework.context.ApplicationContext parent, List<Configurations> configurations)
public SELF run(ContextConsumer<? super A> consumer)
ApplicationContext
based on the current state of
this loader. The context is consumed by the specified consumer
and closed
upon completion.consumer
- the consumer of the created ApplicationContext
Copyright © 2020 Pivotal Software, Inc.. All rights reserved.