diff --git a/spring-boot-modules/spring-boot-annotations/pom.xml b/spring-boot-modules/spring-boot-annotations/pom.xml
index 4ee40bb90b..0affed0746 100644
--- a/spring-boot-modules/spring-boot-annotations/pom.xml
+++ b/spring-boot-modules/spring-boot-annotations/pom.xml
@@ -42,6 +42,11 @@
org.hibernate
hibernate-core
+
+ org.mockito
+ mockito-inline
+ test
+
org.springframework.boot
diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java
new file mode 100644
index 0000000000..7294d843d1
--- /dev/null
+++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java
@@ -0,0 +1,20 @@
+package com.baeldung.annotations.conditional;
+
+import org.apache.commons.lang3.SystemUtils;
+import org.springframework.boot.system.JavaVersion;
+
+public class ConditionalUtils {
+
+ public static boolean isWindows() {
+ return SystemUtils.IS_OS_WINDOWS;
+ }
+
+ public static boolean isJava8() {
+ return JavaVersion.getJavaVersion().equals(JavaVersion.EIGHT);
+ }
+
+ public static boolean isJava9() {
+ return JavaVersion.getJavaVersion().equals(JavaVersion.NINE);
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java
index 7a866560c8..768cd9f6ed 100644
--- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java
+++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java
@@ -8,6 +8,6 @@ public class IsDevEnvCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
- return System.getProperty("env").equals("dev");
+ return "dev".equals(System.getProperty("env"));
}
}
diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java
index 21702ed9b8..24aa4f4b1c 100644
--- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java
+++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java
@@ -1,7 +1,5 @@
package com.baeldung.annotations.conditional;
-import org.apache.commons.lang3.SystemUtils;
-
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
@@ -10,6 +8,6 @@ public class IsWindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
- return SystemUtils.IS_OS_WINDOWS;
+ return ConditionalUtils.isWindows();
}
}
diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java
index 0d2ad56917..c5f5e16d52 100644
--- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java
+++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java
@@ -1,6 +1,5 @@
package com.baeldung.annotations.conditional;
-import org.springframework.boot.system.JavaVersion;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
@@ -9,6 +8,6 @@ public class Java8Condition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
- return JavaVersion.getJavaVersion().equals(JavaVersion.EIGHT);
+ return ConditionalUtils.isJava8();
}
}
diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java
index 6a21be8bde..2afa8b25a7 100644
--- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java
+++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java
@@ -1,6 +1,5 @@
package com.baeldung.annotations.conditional;
-import org.springframework.boot.system.JavaVersion;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
@@ -9,6 +8,6 @@ public class Java9Condition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
- return JavaVersion.getJavaVersion().equals(JavaVersion.NINE);
+ return ConditionalUtils.isJava9();
}
}
diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java
index 1a65a16763..e104ec86e1 100644
--- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java
+++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java
@@ -13,7 +13,7 @@ import org.springframework.stereotype.Service;
value = "logging.enabled",
havingValue = "true",
matchIfMissing = true)
-@ConditionalOnExpression("${logging.enabled:true} and ${logging.level:DEBUG}")
+@ConditionalOnExpression("${logging.enabled:true} and '${logging.level}'.equals('DEBUG')")
@ConditionalOnJava(JavaVersion.EIGHT)
public class LoggingService {
}
diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java
new file mode 100644
index 0000000000..6b23433422
--- /dev/null
+++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java
@@ -0,0 +1,10 @@
+package com.baeldung.annotations.conditional;
+
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.annotation.ComponentScan;
+
+@TestConfiguration
+@ComponentScan("com.baeldung.annotations.conditional")
+public class ConditionalTestConfiguration {
+
+}
diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java
new file mode 100644
index 0000000000..54899f523d
--- /dev/null
+++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java
@@ -0,0 +1,50 @@
+package com.baeldung.annotations.conditional;
+
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
+public class DevEnvLoggingConfigurationTest {
+
+ private final ApplicationContextRunner contextRunner = new ApplicationContextRunner();
+
+ @Test
+ public void whenDevEnvEnabled_thenDevEnvLoggingConfigurationAndLoggingServiceShouldBeCreated() {
+ System.setProperty("env", "dev");
+
+ contextRunner
+ .withUserConfiguration(ConditionalTestConfiguration.class)
+ .run(context ->
+ Assertions.assertNotNull(
+ context.getBean(DevEnvLoggingConfiguration.class)
+ )
+ );
+ contextRunner
+ .withUserConfiguration(ConditionalTestConfiguration.class)
+ .run(context ->
+ Assertions.assertNotNull(
+ context.getBean(LoggingService.class)
+ )
+ );
+ }
+
+ @Test
+ public void whenDevEnvNotEnabled_thenDevEnvLoggingConfigurationAndLoggingServiceShouldNotBeCreated() {
+ contextRunner
+ .withUserConfiguration(ConditionalTestConfiguration.class)
+ .run(context ->
+ Assertions.assertThrows(NoSuchBeanDefinitionException.class, () ->
+ context.getBean(DevEnvLoggingConfiguration.class)
+ )
+ );
+ contextRunner
+ .withUserConfiguration(ConditionalTestConfiguration.class)
+ .run(context ->
+ Assertions.assertThrows(NoSuchBeanDefinitionException.class, () ->
+ context.getBean(LoggingService.class)
+ )
+ );
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java
new file mode 100644
index 0000000000..f4ef471f76
--- /dev/null
+++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java
@@ -0,0 +1,31 @@
+package com.baeldung.annotations.conditional;
+
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.ConditionContext;
+import org.springframework.core.type.AnnotatedTypeMetadata;
+
+public class IsDevEnvConditionUnitTest {
+
+ @Test
+ public void whenDevEnvEnabled_thenDevEnvConditionShouldPass() {
+ System.setProperty("env", "dev");
+
+ Assertions.assertTrue(
+ new IsDevEnvCondition().matches(
+ Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class)
+ )
+ );
+ }
+
+ @Test
+ public void whenDevEnvNotEnabled_thenDevEnvConditionShouldNotPass() {
+ Assertions.assertTrue(
+ new IsDevEnvCondition().matches(
+ Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class)
+ )
+ );
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java
new file mode 100644
index 0000000000..8f632aed1d
--- /dev/null
+++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java
@@ -0,0 +1,40 @@
+package com.baeldung.annotations.conditional;
+
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.ConditionContext;
+import org.springframework.core.type.AnnotatedTypeMetadata;
+
+public class IsWindowsConditionUnitTest {
+
+ @Test
+ public void whenOnWindows_thenIsWindowsConditionShouldPass() {
+
+ try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) {
+ theMock.when(ConditionalUtils::isWindows)
+ .thenReturn(true);
+ Assertions.assertTrue(
+ new IsWindowsCondition().matches(
+ Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class)
+ )
+ );
+ }
+
+ }
+
+ @Test
+ public void whenNotOnWindows_thenIsWindowsConditionShouldNotPass() {
+ try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) {
+ theMock.when(ConditionalUtils::isWindows)
+ .thenReturn(false);
+ Assertions.assertFalse(
+ new IsWindowsCondition().matches(
+ Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class)
+ )
+ );
+ }
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java
new file mode 100644
index 0000000000..37bf002ae2
--- /dev/null
+++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java
@@ -0,0 +1,40 @@
+package com.baeldung.annotations.conditional;
+
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.ConditionContext;
+import org.springframework.core.type.AnnotatedTypeMetadata;
+
+public class Java8ConditionUnitTest {
+
+ @Test
+ public void whenOnJava8_thenJava8ConditionShouldPass() {
+
+ try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) {
+ theMock.when(ConditionalUtils::isJava8)
+ .thenReturn(true);
+ Assertions.assertTrue(
+ new Java8Condition().matches(
+ Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class)
+ )
+ );
+ }
+
+ }
+
+ @Test
+ public void whenNotOnJava8_thenJava8ConditionShouldNotPass() {
+ try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) {
+ theMock.when(ConditionalUtils::isJava8)
+ .thenReturn(false);
+ Assertions.assertFalse(
+ new Java8Condition().matches(
+ Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class)
+ )
+ );
+ }
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java
new file mode 100644
index 0000000000..5808569107
--- /dev/null
+++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java
@@ -0,0 +1,40 @@
+package com.baeldung.annotations.conditional;
+
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.ConditionContext;
+import org.springframework.core.type.AnnotatedTypeMetadata;
+
+public class Java9ConditionUnitTest {
+
+ @Test
+ public void whenOnJava9_thenJava9ConditionShouldPass() {
+
+ try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) {
+ theMock.when(ConditionalUtils::isJava9)
+ .thenReturn(true);
+ Assertions.assertTrue(
+ new Java9Condition().matches(
+ Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class)
+ )
+ );
+ }
+
+ }
+
+ @Test
+ public void whenNotOnJava9_thenJava9ConditionShouldNotPass() {
+ try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) {
+ theMock.when(ConditionalUtils::isJava9)
+ .thenReturn(false);
+ Assertions.assertFalse(
+ new Java9Condition().matches(
+ Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class)
+ )
+ );
+ }
+ }
+
+}