Spring 5 Testing with @EnabledIf Annotation

1. Introduction

In this quick article, we’ll discover the @EnabledIf and @DisabledIf annotations in Spring 5 using JUnit 5.

Simply put, those annotations make it possible to disable/enable particular test if a specified condition is met.

We’ll use a simple test class to show how these annotations work:

@SpringJUnitConfig(Spring5EnabledAnnotationIntegrationTest.Config.class)
public class Spring5EnabledAnnotationIntegrationTest {
 
    @Configuration
    static class Config {}
}

2. @EnabledIf

Let’s add to our class this simple test with a text literal “true”:

@EnabledIf("true")
@Test
void givenEnabledIfLiteral_WhenTrue_ThenTestExecuted() {
    assertTrue(true);
}

If we run this test, it executes normally.

However, if we replace the provided String with “false” it’s not executed:

Keep in mind that if you want to statically disable a test, there’s a dedicated @Disabled annotation for this.

3. @EnabledIf With a Property Placeholder

A more practical way of using @EnabledIf is by using a property placeholder:

@Test
@EnabledIf(
  expression = "${tests.enabled}", 
  loadContext = true)
void givenEnabledIfExpression_WhenTrue_ThenTestExecuted() {
    // ...
}

First of all, we need to make sure that the loadContext parameter is set to true so that the Spring context gets loaded.

By default, this parameter is set to false to avoid unnecessary context loading.

4. @EnabledIf With a SpEL Expression

Finally, we can use the annotation with Spring Expression Language (SpEL) expressions.

For example, we can enable tests only when running JDK 1.8

@Test
@EnabledIf("#{systemProperties['java.version'].startsWith('1.8')}")
void givenEnabledIfSpel_WhenTrue_ThenTestExecuted() {
    assertTrue(true);
}

5. @DisabledIf

This annotation is the opposite of @EnabledIf.

For example, we can disable test when running on Java 1.7:

@Test
@DisabledIf("#{systemProperties['java.version'].startsWith('1.7')}")
void givenDisabledIf_WhenTrue_ThenTestNotExecuted() {
    assertTrue(true);
}

6. Conclusion

In this brief article, we went through several examples of the usage of @EnabledIf and @DisabledIf annotations in JUnit 5 tests using the SpringExtension.

The full source code for the examples is available over on GitHub.

Related posts:

Spring Boot Annotations
Generate Spring Boot REST Client with Swagger
Java Program to Search Number Using Divide and Conquer with the Aid of Fibonacci Numbers
How to Count Duplicate Elements in Arraylist
Java Program to Check the Connectivity of Graph Using BFS
Java Program to Implement Rope
Flattening Nested Collections in Java
Prevent Cross-Site Scripting (XSS) in a Spring Application
How To Serialize and Deserialize Enums with Jackson
Java Program to Implement Ford–Fulkerson Algorithm
Abstract class và Interface trong Java
Implementing a Binary Tree in Java
Java – File to Reader
Lớp lồng nhau trong java (Java inner class)
Constructor Injection in Spring with Lombok
Jackson Unmarshalling JSON with Unknown Properties
Uploading MultipartFile with Spring RestTemplate
Tính kế thừa (Inheritance) trong java
Spring Webflux with Kotlin
Arrays.asList vs new ArrayList(Arrays.asList())
Java Program to Find the Shortest Path from Source Vertex to All Other Vertices in Linear Time
Cơ chế Upcasting và Downcasting trong java
Hướng dẫn Java Design Pattern – Mediator
MyBatis with Spring
Daemon Threads in Java
Java Program to Compute Discrete Fourier Transform Using the Fast Fourier Transform Approach
Sending Emails with Java
Java Program to Implement First Fit Decreasing for 1-D Objects and M Bins
Java Program to Perform Optimal Paranthesization Using Dynamic Programming
Rest Web service: Filter và Interceptor với Jersey 2.x (P2)
Converting Between Byte Arrays and Hexadecimal Strings in Java
Query Entities by Dates and Times with Spring Data JPA