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:

Generating Random Dates in Java
Introduction to the Functional Web Framework in Spring 5
Java Program to Implement JobStateReasons API
Guava – Join and Split Collections
Spring Boot - Tracing Micro Service Logs
Working with Tree Model Nodes in Jackson
Java Program to Perform integer Partition for a Specific Case
Spring Security OAuth2 – Simple Token Revocation
Spring Boot - Rest Controller Unit Test
Spring Security 5 – OAuth2 Login
A Guide to Java HashMap
Java Program to Implement the Alexander Bogomolny’s UnOrdered Permutation Algorithm for Elements Fro...
Java Program to Implement Interpolation Search Algorithm
Java Program to Find Number of Spanning Trees in a Complete Bipartite Graph
Send email with JavaMail
Intro to Inversion of Control and Dependency Injection with Spring
Using a List of Values in a JdbcTemplate IN Clause
Java Program to Implement Solovay Strassen Primality Test Algorithm
Java Program to Implement Threaded Binary Tree
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Java Program to Implement Graph Coloring Algorithm
Java Program to Implement Best-First Search
Collection trong java
Java Program to Implement Interpolation Search Algorithm
Java Program to Implement IdentityHashMap API
Using Custom Banners in Spring Boot
Finding the Differences Between Two Lists in Java
Comparing Strings in Java
Object cloning trong java
Spring Cloud AWS – S3
Hướng dẫn Java Design Pattern – Proxy
Sao chép các phần tử của một mảng sang mảng khác như thế nào?