diff --git a/spring-5-reactive/pom.xml b/spring-5-reactive/pom.xml
index ab64d1e2fa..63cc185afe 100644
--- a/spring-5-reactive/pom.xml
+++ b/spring-5-reactive/pom.xml
@@ -143,7 +143,7 @@
1.0
1.0
4.1
- 3.1.6.RELEASE
+ 3.2.3.RELEASE
diff --git a/spring-5-reactive/src/test/java/com/baeldung/stepverifier/PostExecutionUnitTest.java b/spring-5-reactive/src/test/java/com/baeldung/stepverifier/PostExecutionUnitTest.java
new file mode 100644
index 0000000000..17fea6b50b
--- /dev/null
+++ b/spring-5-reactive/src/test/java/com/baeldung/stepverifier/PostExecutionUnitTest.java
@@ -0,0 +1,34 @@
+package com.baeldung.stepverifier;
+
+import org.junit.Test;
+import reactor.core.publisher.Flux;
+import reactor.test.StepVerifier;
+
+import java.time.Duration;
+
+public class PostExecutionUnitTest {
+
+ Flux source = Flux.create(emitter -> {
+ emitter.next(1);
+ emitter.next(2);
+ emitter.next(3);
+ emitter.complete();
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ emitter.next(4);
+ }).filter(number -> number % 2 == 0);
+
+ @Test
+ public void droppedElements() {
+ StepVerifier.create(source)
+ .expectNext(2)
+ .expectComplete()
+ .verifyThenAssertThat()
+ .hasDropped(4)
+ .tookLessThan(Duration.ofMillis(1050));
+ }
+
+}
diff --git a/spring-5-reactive/src/test/java/com/baeldung/stepverifier/StepByStepUnitTest.java b/spring-5-reactive/src/test/java/com/baeldung/stepverifier/StepByStepUnitTest.java
new file mode 100644
index 0000000000..c7196d6b6c
--- /dev/null
+++ b/spring-5-reactive/src/test/java/com/baeldung/stepverifier/StepByStepUnitTest.java
@@ -0,0 +1,39 @@
+package com.baeldung.stepverifier;
+
+import org.junit.Test;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+public class StepByStepUnitTest {
+
+ Flux source = Flux.just("John", "Monica", "Mark", "Cloe", "Frank", "Casper", "Olivia", "Emily", "Cate")
+ .filter(name -> name.length() == 4)
+ .map(String::toUpperCase);
+
+ @Test
+ public void shouldReturnForLettersUpperCaseStrings() {
+ StepVerifier
+ .create(source)
+ .expectNext("JOHN")
+ .expectNextMatches(name -> name.startsWith("MA"))
+ .expectNext("CLOE", "CATE")
+ .expectComplete()
+ .verify();
+ }
+
+ @Test
+ public void shouldThrowExceptionAfterFourElements() {
+ Flux error = source.concatWith(
+ Mono.error(new IllegalArgumentException("Our message"))
+ );
+
+ StepVerifier
+ .create(error)
+ .expectNextCount(4)
+ .expectErrorMatches(throwable -> throwable instanceof IllegalArgumentException &&
+ throwable.getMessage().equals("Our message")
+ ).verify();
+ }
+
+}
diff --git a/spring-5-reactive/src/test/java/com/baeldung/stepverifier/TestingTestPublisherUnitTest.java b/spring-5-reactive/src/test/java/com/baeldung/stepverifier/TestingTestPublisherUnitTest.java
new file mode 100644
index 0000000000..fb65e2d315
--- /dev/null
+++ b/spring-5-reactive/src/test/java/com/baeldung/stepverifier/TestingTestPublisherUnitTest.java
@@ -0,0 +1,51 @@
+package com.baeldung.stepverifier;
+
+import org.junit.Test;
+import reactor.core.publisher.Flux;
+import reactor.test.StepVerifier;
+import reactor.test.publisher.TestPublisher;
+
+public class TestingTestPublisherUnitTest {
+
+ @Test
+ public void testPublisher() {
+ TestPublisher
+ .create()
+ .next("First", "Second", "Third")
+ .error(new RuntimeException("Message"));
+ }
+
+ @Test
+ public void nonCompliant() {
+ TestPublisher
+ .createNoncompliant(TestPublisher.Violation.ALLOW_NULL)
+ .emit("1", "2", null, "3");
+ }
+
+ @Test
+ public void testPublisherInAction() {
+ final TestPublisher testPublisher = TestPublisher.create();
+
+ UppercaseConverter uppercaseConverter = new UppercaseConverter(testPublisher.flux());
+
+ StepVerifier.create(uppercaseConverter.getUpperCase())
+ .then(() -> testPublisher.emit("aA", "bb", "ccc"))
+ .expectNext("AA", "BB", "CCC")
+ .verifyComplete();
+ }
+
+}
+
+class UppercaseConverter {
+ private final Flux source;
+
+ UppercaseConverter(Flux source) {
+ this.source = source;
+ }
+
+ Flux getUpperCase() {
+ return source
+ .map(String::toUpperCase);
+ }
+
+}
diff --git a/spring-5-reactive/src/test/java/com/baeldung/stepverifier/TimeBasedUnitTest.java b/spring-5-reactive/src/test/java/com/baeldung/stepverifier/TimeBasedUnitTest.java
new file mode 100644
index 0000000000..54e5e7882a
--- /dev/null
+++ b/spring-5-reactive/src/test/java/com/baeldung/stepverifier/TimeBasedUnitTest.java
@@ -0,0 +1,22 @@
+package com.baeldung.stepverifier;
+
+import org.junit.Test;
+import reactor.core.publisher.Flux;
+import reactor.test.StepVerifier;
+
+import java.time.Duration;
+
+public class TimeBasedUnitTest {
+
+ @Test
+ public void simpleExample() {
+ StepVerifier
+ .withVirtualTime(() -> Flux.interval(Duration.ofSeconds(1)).take(2))
+ .expectSubscription()
+ .expectNoEvent(Duration.ofSeconds(1))
+ .expectNext(0L)
+ .thenAwait(Duration.ofSeconds(1))
+ .expectNext(1L)
+ .verifyComplete();
+ }
+}