AbstractApplicationContextRunner
Utility design to run an 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
});
}
Author
Stephane Nicoll
Andy Wilkinson
Phillip Webb
Since
2.0.0
Parameters
the "self" type for this runner
the context type
the application context assertion provider