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:

Check if a String is a Palindrome in Java
Guide to the Java TransferQueue
Java Program to Implement Radix Sort
Introduction to Spliterator in Java
Java Program to Construct K-D Tree for 2 Dimensional Data
Spring MVC Custom Validation
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Intro to Spring Boot Starters
Java Program to Find MST (Minimum Spanning Tree) using Kruskal’s Algorithm
Java Web Services – Jersey JAX-RS – REST và sử dụng REST API testing tools với Postman
How to Get All Dates Between Two Dates?
Java Program to Implement Iterative Deepening
Java Program to Find a Good Feedback Edge Set in a Graph
Jackson Unmarshalling JSON with Unknown Properties
Java Program to Implement the Vigenere Cypher
Java Program to Compute Discrete Fourier Transform Using the Fast Fourier Transform Approach
Guide to the Synchronized Keyword in Java
Disable Spring Data Auto Configuration
Creating a Custom Starter with Spring Boot
Java Program to Implement Park-Miller Random Number Generation Algorithm
A Guide To UDP In Java
Java Program to Implement the Checksum Method for Small String Messages and Detect
Spring REST with a Zuul Proxy
StringBuilder vs StringBuffer in Java
Assert an Exception is Thrown in JUnit 4 and 5
Constructor Dependency Injection in Spring
Exception Handling in Java
Spring RequestMapping
Java Program to Implement TreeMap API
How to Convert List to Map in Java
Spring Security and OpenID Connect
Performance Difference Between save() and saveAll() in Spring Data