1. Introduction
In this quick article, we’ll take a look at the new @SpringJUnitConfig and @SpringJUnitWebConfig annotations available in Spring 5.
These annotations are a composition of JUnit 5 and Spring 5 annotations that make test creation easier and faster.
2. @SpringJUnitConfig
@SpringJUnitConfig combines these 2 annotations:
- @ExtendWith(SpringExtension.class) from JUnit 5 to run the test with the SpringExtension class and
- @ContextConfiguration from Spring Testing to load the Spring context
Let’s create a test and use this annotation in practice:
@SpringJUnitConfig(SpringJUnitConfigTest.Config.class) public class SpringJUnitConfigTest { @Configuration static class Config {} }
Notice that, in contrast to the @ContextConfiguration, configuration classes are declared using the value attribute. However, resource locations should be specified with the locations attribute.
We can now verify that the Spring context was really loaded:
@Autowired private ApplicationContext applicationContext; @Test void givenAppContext_WhenInjected_ThenItShouldNotBeNull() { assertNotNull(applicationContext); }
Finally, here we have the equivalent code of @SpringJUnitConfig(SpringJUnitConfigTest.Config.class):
@ExtendWith(SpringExtension.class) @ContextConfiguration(classes = SpringJUnitConfigTest.Config.class)
3. @SpringJUnitWebConfig
@SpringJUnitWebConfig combines the same annotations of @SpringJUnitConfig plus the @WebAppConfiguration from Spring testing – to load the WebApplicationContext.
Let’s see how this annotation works:
@SpringJUnitWebConfig(SpringJUnitWebConfigTest.Config.class) public class SpringJUnitWebConfigTest { @Configuration static class Config { } }
Like @SpringJUnitConfig, the configuration classes go in the value attribute and any resources are specified using the locations attribute.
Also, the value attribute of @WebAppConfiguration should now be specified using the resourcePath attribute. By default, this attribute is set to “src/main/webapp”.
Let’s now verify that the WebApplicationContext was really loaded:
@Autowired private WebApplicationContext webAppContext; @Test void givenWebAppContext_WhenInjected_ThenItShouldNotBeNull() { assertNotNull(webAppContext); }
Again, here we have the equivalent code without using @SpringJUnitWebConfig:
@ExtendWith(SpringExtension.class) @WebAppConfiguration @ContextConfiguration(classes = SpringJUnitWebConfigTest.Config.class)
4. Conclusion
In this brief tutorial, we showed how to use the newly introduced @SpringJUnitConfig and @SpringJUnitWebConfig annotations in Spring 5.
The full source code for the examples is available over on GitHub.