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:

Hướng dẫn Java Design Pattern – Composite
Java Program to Perform Complex Number Multiplication
HttpClient Connection Management
Java Program to Implement Stack API
Java Program to Find MST (Minimum Spanning Tree) using Prim’s Algorithm
Prevent Brute Force Authentication Attempts with Spring Security
The Spring @Controller and @RestController Annotations
Working with Network Interfaces in Java
Java Program to Implement Naor-Reingold Pseudo Random Function
Anonymous Classes in Java
Registration with Spring Security – Password Encoding
Jackson Unmarshalling JSON with Unknown Properties
Giới thiệu Java 8
Java – Create a File
How to Return 404 with Spring WebFlux
Spring AMQP in Reactive Applications
Introduction to Spring Cloud Netflix – Eureka
Convert XML to JSON Using Jackson
Remove HTML tags from a file to extract only the TEXT
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
Entity To DTO Conversion for a Spring REST API
Shuffling Collections In Java
Intro to Spring Boot Starters
Java Program to Implement Warshall Algorithm
Java Program to Implement Stack
Predicate trong Java 8
Sao chép các phần tử của một mảng sang mảng khác như thế nào?
How to Add a Single Element to a Stream
New Features in Java 14
Java Program to Implement the Checksum Method for Small String Messages and Detect
Java Program to Find Path Between Two Nodes in a Graph
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