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:

The Modulo Operator in Java
Java 9 Stream API Improvements
Biến trong java
Java Program to Implement Jarvis Algorithm
Java Program to Implement Hamiltonian Cycle Algorithm
Java – Random Long, Float, Integer and Double
Java Program to Implement PriorityBlockingQueue API
Java Program to Implement Park-Miller Random Number Generation Algorithm
Java Streams vs Vavr Streams
Getting a File’s Mime Type in Java
Spring’s RequestBody and ResponseBody Annotations
Posting with HttpClient
Tránh lỗi NullPointerException trong Java như thế nào?
Spring Boot - Securing Web Applications
Jackson – JsonMappingException (No serializer found for class)
An Intro to Spring Cloud Task
Java Program to Perform Left Rotation on a Binary Search Tree
Java Program to Use Above Below Primitive to Test Whether Two Lines Intersect
What is Thread-Safety and How to Achieve it?
4 tính chất của lập trình hướng đối tượng trong Java
Vấn đề Nhà sản xuất (Producer) – Người tiêu dùng (Consumer) và đồng bộ hóa các luồng trong Java
Creating Docker Images with Spring Boot
Spring WebClient vs. RestTemplate
Hướng dẫn sử dụng Printing Service trong Java
Lớp Collections trong Java (Collections Utility Class)
Constructor Injection in Spring with Lombok
Filtering and Transforming Collections in Guava
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree
Exploring the Spring Boot TestRestTemplate
Java Optional as Return Type
Java Program to Check whether Undirected Graph is Connected using BFS
Login For a Spring Web App – Error Handling and Localization