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:

A Guide to EnumMap
Java Program to Represent Graph Using Incidence Matrix
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching
Java Program to Solve TSP Using Minimum Spanning Trees
Java Program to Implement CopyOnWriteArrayList API
Java Program to Generate a Graph for a Given Fixed Degree Sequence
Rest Web service: Filter và Interceptor với Jersey 2.x (P2)
Java Program to Implement Gaussian Elimination Algorithm
Hướng dẫn sử dụng luồng vào ra nhị phân trong Java
Limiting Query Results with JPA and Spring Data JPA
How to use the Spring FactoryBean?
Interface trong Java 8 – Default method và Static method
Biến trong java
Abstract class và Interface trong Java
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Java Program to Implement Affine Cipher
Java Program to Check Whether a Directed Graph Contains a Eulerian Path
Java Program to Implement EnumMap API
Error Handling for REST with Spring
How to Iterate Over a Stream With Indices
Static Content in Spring WebFlux
Java Program to Check Multiplicability of Two Matrices
How to Get All Dates Between Two Dates?
Filtering a Stream of Optionals in Java
Java Program to Implement Hopcroft Algorithm
Class Loaders in Java
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Beans and Dependency Injection
Java Program to Check whether Directed Graph is Connected using BFS
Giới thiệu Json Web Token (JWT)
Spring Security OAuth2 – Simple Token Revocation
Java Program to Implement Double Order Traversal of a Binary Tree