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:

Spring Security Form Login
Java String to InputStream
Java Program to do a Depth First Search/Traversal on a graph non-recursively
Java Program to Implement Splay Tree
Constructor Dependency Injection in Spring
Java Program to Find All Pairs Shortest Path
Java Program to Check if a Directed Graph is a Tree or Not Using DFS
Spring Boot Integration Testing with Embedded MongoDB
Java Program to implement Associate Array
Java Program to Find ith Largest Number from a Given List Using Order-Statistic Algorithm
Java Program to Implement SimpeBindings API
Guide to the Volatile Keyword in Java
Java Program to Check whether Directed Graph is Connected using BFS
Java Program to Implement Strassen Algorithm
Java Program to Generate Random Partition out of a Given Set of Numbers or Characters
Tổng quan về ngôn ngữ lập trình java
Java Program to Implement Cartesian Tree
Programmatic Transaction Management in Spring
Tìm hiểu về Web Service
Java Program to Implement Trie
Lập trình đa luồng với CompletableFuture trong Java 8
Java Program to do a Breadth First Search/Traversal on a graph non-recursively
Hướng dẫn Java Design Pattern – Intercepting Filter
Guide to the Java ArrayList
Java Program to Implement Ternary Heap
Tính trừu tượng (Abstraction) trong Java
Get and Post Lists of Objects with RestTemplate
Guava Collections Cookbook
Java Program to Find SSSP (Single Source Shortest Path) in DAG (Directed Acyclic Graphs)
REST Pagination in Spring
Spring Boot - CORS Support
Disable DNS caching