The SpringJUnitConfig and SpringJUnitWebConfig Annotations in Spring 5

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(SpringJUnitConfigIntegrationTest.Config.class)
public class SpringJUnitConfigIntegrationTest {

    @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(SpringJUnitWebConfigIntegrationTest.Config.class)
public class SpringJUnitWebConfigIntegrationTest {

    @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 = SpringJUnitWebConfigIntegrationTest.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.

Related posts:

Jackson Ignore Properties on Marshalling
HTTP Authentification and CGI/Servlet
Java Program to Implement Hash Tables with Double Hashing
Java Program to Perform Polygon Containment Test
Java Program to Find Second Smallest of n Elements with Given Complexity Constraint
Java Program to Implement VList
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
Spring Security Authentication Provider
So sánh ArrayList và Vector trong Java
Java Timer
Comparing getPath(), getAbsolutePath(), and getCanonicalPath() in Java
Redirect to Different Pages after Login with Spring Security
Guide to Spring @Autowired
Java Program to Implement LinkedTransferQueue API
Lấy ngày giờ hiện tại trong Java
Properties with Spring and Spring Boot
Java Program to Implement Best-First Search
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull
Spring MVC + Thymeleaf 3.0: New Features
Hướng dẫn Java Design Pattern – Template Method
Write/Read cookies using HTTP and Read a file from the internet
HttpClient with SSL
Java Program to Implement Euler Circuit Problem
Hướng dẫn Java Design Pattern – Flyweight
Java Program to Check Whether a Directed Graph Contains a Eulerian Path
Binary Numbers in Java
Java – String to Reader
Java Program to Find Shortest Path Between All Vertices Using Floyd-Warshall’s Algorithm
Netflix Archaius with Various Database Configurations
Using JWT with Spring Security OAuth (legacy stack)
Request Method Not Supported (405) in Spring
Sắp xếp trong Java 8