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:

Guava CharMatcher
Java Program to Perform Encoding of a Message Using Matrix Multiplication
Anonymous Classes in Java
Java Program to Implement HashSet API
Practical Java Examples of the Big O Notation
Life Cycle of a Thread in Java
String Operations with Java Streams
Spring Boot - Database Handling
Java Program to Construct a Random Graph by the Method of Random Edge Selection
Java Program to Implement Sorted Vector
Comparing Strings in Java
Entity To DTO Conversion for a Spring REST API
Java Program to Perform Postorder Non-Recursive Traversal of a Given Binary Tree
Tìm hiểu về xác thực và phân quyền trong ứng dụng
Java Program to Implement Strassen Algorithm
Java Program to Implement Graham Scan Algorithm to Find the Convex Hull
A Guide to the ResourceBundle
Java Program to implement Circular Buffer
Java Program to Construct K-D Tree for 2 Dimensional Data
Java Program to Find the Longest Subsequence Common to All Sequences in a Set of Sequences
4 tính chất của lập trình hướng đối tượng trong Java
Create a Custom Exception in Java
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching
Using a List of Values in a JdbcTemplate IN Clause
An Introduction to ThreadLocal in Java
A Guide to the Java ExecutorService
Spring Data Java 8 Support
Phương thức forEach() trong java 8
How to Kill a Java Thread
Java Program to Implement Sieve Of Sundaram
String Initialization in Java