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 – Chain of Responsibility
Java Program to Perform Left Rotation on a Binary Search Tree
Java Program to Implement Attribute API
HttpAsyncClient Tutorial
Java Program to Implement PrinterStateReasons API
How to Convert List to Map in Java
Spring Boot - Building RESTful Web Services
Spring Data Java 8 Support
Spring Boot - Internationalization
Java Program to Implement RoleUnresolvedList API
Guide to java.util.concurrent.Locks
Java Program to Implement Karatsuba Multiplication Algorithm
The StackOverflowError in Java
Java Program to Implement Quick Sort with Given Complexity Constraint
Lập trình đa luồng trong Java (Java Multi-threading)
Java Program to Implement the String Search Algorithm for Short Text Sizes
Spring Boot - Enabling HTTPS
Serialization và Deserialization trong java
Tránh lỗi ConcurrentModificationException trong Java như thế nào?
Java Program to Implement Skip List
Spring REST API + OAuth2 + Angular
Java Program to Implement Insertion Sort
Java Program to Find Location of a Point Placed in Three Dimensions Using K-D Trees
Java Program to implement Array Deque
Java Program to Solve any Linear Equations
Java Program to Find Median of Elements where Elements are Stored in 2 Different Arrays
Spring Boot With H2 Database
Giới thiệu HATEOAS
Java Program to Generate Date Between Given Range
Custom Thread Pools In Java 8 Parallel Streams
Java Program to Implement the Program Used in grep/egrep/fgrep
Java Program to Implement Naor-Reingold Pseudo Random Function