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:

Java Program to Generate Random Partition out of a Given Set of Numbers or Characters
Service Registration with Eureka
Java Program to Encode a Message Using Playfair Cipher
Java Program to Implement Park-Miller Random Number Generation Algorithm
StringBuilder vs StringBuffer in Java
Hướng dẫn Java Design Pattern – Facade
Xử lý ngoại lệ đối với trường hợp ghi đè phương thức trong java
Hướng dẫn sử dụng luồng vào ra nhị phân trong Java
Java Program to Implement HashMap API
Spring Cloud – Tracing Services with Zipkin
Finding the Differences Between Two Lists in Java
Java – Get Random Item/Element From a List
Vector trong Java
Java Program to Implement Hopcroft Algorithm
Hướng dẫn Java Design Pattern – Observer
Sắp xếp trong Java 8
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
Hướng dẫn sử dụng String Format trong Java
Implementing a Runnable vs Extending a Thread
A Guide to LinkedHashMap in Java
Intro to Spring Boot Starters
Spring Cloud AWS – S3
Giới thiệu Google Guice – Dependency injection (DI) framework
Java Timer
Java Program to Implement Heap Sort Using Library Functions
A Guide to the Java LinkedList
Java Program to Solve Knapsack Problem Using Dynamic Programming
Java Program to Implement Sieve Of Eratosthenes
Java Program to Use the Bellman-Ford Algorithm to Find the Shortest Path
Convert char to String in Java
Serialize Only Fields that meet a Custom Criteria with Jackson
How to Use if/else Logic in Java 8 Streams