spring-5-enabledIf
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
@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
@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
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
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.