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:

HashSet trong java
How to Delay Code Execution in Java
Phân biệt JVM, JRE, JDK
Tính đa hình (Polymorphism) trong Java
How to Find an Element in a List with Java
Create a Custom Exception in Java
Java Program to Perform Preorder Non-Recursive Traversal of a Given Binary Tree
Converting Java Date to OffsetDateTime
Java Program to Implement Word Wrap Problem
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Predicate trong Java 8
Java Program to Implement Meldable Heap
Java Program for Douglas-Peucker Algorithm Implementation
Spring Cloud AWS – Messaging Support
Spring Security Registration – Resend Verification Email
Lập trình đa luồng với Callable và Future trong Java
Converting a List to String in Java
Wrapper Classes in Java
Hướng dẫn Java Design Pattern – Bridge
Java Program to Perform Arithmetic Operations on Numbers of Size
Java Program to Represent Graph Using Incidence List
Java Program to Perform Deletion in a BST
Java Web Services – Jersey JAX-RS – REST và sử dụng REST API testing tools với Postman
Converting Between Byte Arrays and Hexadecimal Strings in Java
StringBuilder vs StringBuffer in Java
TreeSet và sử dụng Comparable, Comparator trong java
Tạo chương trình Java đầu tiên sử dụng Eclipse
Unsatisfied Dependency in Spring
Handling Errors in Spring WebFlux
Java Program to Implement the Alexander Bogomolny’s UnOrdered Permutation Algorithm for Elements Fro...
Checking for Empty or Blank Strings in Java
Java Program to Implement Expression Tree