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 toString() Method
Tính trừu tượng (Abstraction) trong Java
HashSet trong Java hoạt động như thế nào?
How to Define a Spring Boot Filter?
Spring WebClient and OAuth2 Support
Java Program to Implement LinkedHashSet API
Registration – Password Strength and Rules
An Intro to Spring Cloud Security
Count Occurrences of a Char in a String
Spring Boot - Tomcat Port Number
@Lookup Annotation in Spring
Hướng dẫn Java Design Pattern – Dependency Injection
Java Program to Find Maximum Element in an Array using Binary Search
Java Program to Perform Deletion in a BST
Thao tác với tập tin và thư mục trong Java
Java Program to Implement Euclid GCD Algorithm
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
Java Web Services – Jersey JAX-RS – REST và sử dụng REST API testing tools với Postman
Java Program to Construct an Expression Tree for an Prefix Expression
Tính đóng gói (Encapsulation) trong java
Java Program to Implement Binomial Tree
Java Program to find the peak element of an array using Binary Search approach
Introduction to Spring Cloud Rest Client with Netflix Ribbon
Java Program to Implement Binary Tree
Introduction to Java Serialization
Introduction to Spliterator in Java
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching
Java Program to Implement Bresenham Line Algorithm
Autoboxing và Unboxing trong Java
Quick Guide on Loading Initial Data with Spring Boot
Introduction to Java 8 Streams
A Guide to WatchService in Java NIO2