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:

Generate Spring Boot REST Client with Swagger
XML-Based Injection in Spring
Hướng dẫn Java Design Pattern – Adapter
Ignore Null Fields with Jackson
Java Program to Create a Random Graph Using Random Edge Generation
Java Program to Implement Knapsack Algorithm
Rate Limiting in Spring Cloud Netflix Zuul
Java Program to Generate Random Partition out of a Given Set of Numbers or Characters
Java Collections Interview Questions
A Guide to System.exit()
Java Program to Implement IdentityHashMap API
Java Program to Test Using DFS Whether a Directed Graph is Weakly Connected or Not
Java Program to Implement Branch and Bound Method to Perform a Combinatorial Search
Finding Max/Min of a List or Collection
Java Program to Find kth Largest Element in a Sequence
The Order of Tests in JUnit
Các nguyên lý thiết kế hướng đối tượng – SOLID
Java Program to Implement Queue using Two Stacks
Luồng Daemon (Daemon Thread) trong Java
Java Program to Generate N Number of Passwords of Length M Each
Java Program to Implement Sorted Circular Doubly Linked List
Spring Web Annotations
Java Program to Implement Range Tree
Java Multi-line String
Handling Errors in Spring WebFlux
Introduction to Spring MVC HandlerInterceptor
Send email with JavaMail
Introduction to the Java ArrayDeque
Introduction to Project Reactor Bus
Java Program to Decode a Message Encoded Using Playfair Cipher
Java Program to Remove the Edges in a Given Cyclic Graph such that its Linear Extension can be Found
Java Program to Find the GCD and LCM of two Numbers