diff --git a/spring-5/pom.xml b/spring-5/pom.xml
index 58c14475e0..b4b12e5c79 100644
--- a/spring-5/pom.xml
+++ b/spring-5/pom.xml
@@ -89,6 +89,12 @@
org.junit.jupiter
junit-jupiter-api
+
+ org.awaitility
+ awaitility
+ ${awaitility.version}
+ test
+
org.springframework.restdocs
@@ -156,7 +162,7 @@
4.1
${project.build.directory}/generated-snippets
2.21.0
-
+ 3.1.6
diff --git a/spring-5/src/main/java/com/baeldung/config/ScheduledConfig.java b/spring-5/src/main/java/com/baeldung/config/ScheduledConfig.java
new file mode 100644
index 0000000000..b54a2b5339
--- /dev/null
+++ b/spring-5/src/main/java/com/baeldung/config/ScheduledConfig.java
@@ -0,0 +1,11 @@
+package com.baeldung.config;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@Configuration
+@EnableScheduling
+@ComponentScan("com.baeldung.scheduled")
+public class ScheduledConfig {
+}
diff --git a/spring-5/src/main/java/com/baeldung/scheduled/Counter.java b/spring-5/src/main/java/com/baeldung/scheduled/Counter.java
new file mode 100644
index 0000000000..17aa15b6f3
--- /dev/null
+++ b/spring-5/src/main/java/com/baeldung/scheduled/Counter.java
@@ -0,0 +1,20 @@
+package com.baeldung.scheduled;
+
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Component
+public class Counter {
+ private final AtomicInteger count = new AtomicInteger(0);
+
+ @Scheduled(fixedDelay = 5)
+ public void scheduled() {
+ this.count.incrementAndGet();
+ }
+
+ public int getInvocationCount() {
+ return this.count.get();
+ }
+}
diff --git a/spring-5/src/test/java/com/baeldung/scheduled/ScheduledAwaitilityIntegrationTest.java b/spring-5/src/test/java/com/baeldung/scheduled/ScheduledAwaitilityIntegrationTest.java
new file mode 100644
index 0000000000..4883aa16c2
--- /dev/null
+++ b/spring-5/src/test/java/com/baeldung/scheduled/ScheduledAwaitilityIntegrationTest.java
@@ -0,0 +1,24 @@
+package com.baeldung.scheduled;
+
+import com.baeldung.config.ScheduledConfig;
+import org.awaitility.Duration;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.mock.mockito.SpyBean;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+import static org.awaitility.Awaitility.await;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.verify;
+
+@SpringJUnitConfig(ScheduledConfig.class)
+public class ScheduledAwaitilityIntegrationTest {
+
+ @SpyBean private Counter counter;
+
+ @Test
+ public void whenWaitOneSecond_thenScheduledIsCalledAtLeastTenTimes() {
+ await()
+ .atMost(Duration.ONE_SECOND)
+ .untilAsserted(() -> verify(counter, atLeast(10)).scheduled());
+ }
+}
diff --git a/spring-5/src/test/java/com/baeldung/scheduled/ScheduledIntegrationTest.java b/spring-5/src/test/java/com/baeldung/scheduled/ScheduledIntegrationTest.java
new file mode 100644
index 0000000000..058cd50caa
--- /dev/null
+++ b/spring-5/src/test/java/com/baeldung/scheduled/ScheduledIntegrationTest.java
@@ -0,0 +1,22 @@
+package com.baeldung.scheduled;
+
+import com.baeldung.config.ScheduledConfig;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SpringJUnitConfig(ScheduledConfig.class)
+public class ScheduledIntegrationTest {
+
+ @Autowired Counter counter;
+
+ @Test
+ public void givenSleepBy100ms_whenGetInvocationCount_thenIsGreaterThanZero() throws InterruptedException {
+ Thread.sleep(100L);
+
+ assertThat(counter.getInvocationCount()).isGreaterThan(0);
+ }
+
+}