diff --git a/testing-modules/junit-5-advanced-3/pom.xml b/testing-modules/junit-5-advanced-3/pom.xml
index f54df8f28766..0d52ee218044 100644
--- a/testing-modules/junit-5-advanced-3/pom.xml
+++ b/testing-modules/junit-5-advanced-3/pom.xml
@@ -27,6 +27,12 @@
${junit-platform-launcher.version}
test
+
+ org.junit.platform
+ junit-platform-testkit
+ ${junit-platform-testkit.version}
+ test
+
@@ -36,13 +42,22 @@
maven-surefire-plugin
${maven-surefire-plugin.version}
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 9
+ 9
+
+
- 5.13.4
- 1.13.4
+ 6.0.0
+ 6.0.0
3.5.3
+ 6.0.0
diff --git a/testing-modules/junit-5-advanced-3/src/main/java/enginetestkit/Display.java b/testing-modules/junit-5-advanced-3/src/main/java/enginetestkit/Display.java
new file mode 100644
index 000000000000..a615b6d17032
--- /dev/null
+++ b/testing-modules/junit-5-advanced-3/src/main/java/enginetestkit/Display.java
@@ -0,0 +1,21 @@
+package enginetestkit;
+
+public class Display {
+
+ private final Platform platform;
+ private final int height;
+
+ public Display(Platform platform, int height) {
+ this.platform = platform;
+ this.height = height;
+ }
+
+ public Platform getPlatform() {
+ return platform;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+}
diff --git a/testing-modules/junit-5-advanced-3/src/main/java/enginetestkit/Platform.java b/testing-modules/junit-5-advanced-3/src/main/java/enginetestkit/Platform.java
new file mode 100644
index 000000000000..cd6714f5cb15
--- /dev/null
+++ b/testing-modules/junit-5-advanced-3/src/main/java/enginetestkit/Platform.java
@@ -0,0 +1,6 @@
+package enginetestkit;
+
+public enum Platform {
+ DESKTOP,
+ MOBILE
+}
diff --git a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/enginetestkit/DisplayTest.java b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/enginetestkit/DisplayTest.java
new file mode 100644
index 000000000000..9cbbd177ef31
--- /dev/null
+++ b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/enginetestkit/DisplayTest.java
@@ -0,0 +1,39 @@
+package com.baeldung.enginetestkit;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assumptions.assumeTrue;
+
+import org.junit.Ignore;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import enginetestkit.Display;
+import enginetestkit.Platform;
+
+@Ignore
+public class DisplayTest {
+
+ private final Display display = new Display(Platform.DESKTOP, 1000);
+
+ @Test
+ void whenCorrect_thenSucceeds() {
+ assertEquals(1000, display.getHeight());
+ }
+
+ @Test
+ void whenIncorrect_thenFails() {
+ assertEquals(500, display.getHeight());
+ }
+
+ @Test
+ @Disabled("Flakey test needs investigating")
+ void whenDisabled_thenSkips() {
+ assertEquals(999, display.getHeight());
+ }
+
+ @Test
+ void whenAssumptionsFail_thenAborts() {
+ assumeTrue(display.getPlatform() == Platform.MOBILE, "test only runs for mobile");
+ }
+
+}
diff --git a/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/enginetestkit/EngineTestKitDiscoveryUnitTest.java b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/enginetestkit/EngineTestKitDiscoveryUnitTest.java
new file mode 100644
index 000000000000..1bfc4bb34f51
--- /dev/null
+++ b/testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/enginetestkit/EngineTestKitDiscoveryUnitTest.java
@@ -0,0 +1,81 @@
+package com.baeldung.enginetestkit;
+
+import static java.util.Collections.emptyList;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
+import static org.junit.platform.engine.discovery.DiscoverySelectors.selectMethod;
+import static org.junit.platform.testkit.engine.EventConditions.abortedWithReason;
+import static org.junit.platform.testkit.engine.EventConditions.event;
+import static org.junit.platform.testkit.engine.EventConditions.finishedWithFailure;
+import static org.junit.platform.testkit.engine.EventConditions.skippedWithReason;
+import static org.junit.platform.testkit.engine.EventConditions.test;
+import static org.junit.platform.testkit.engine.TestExecutionResultConditions.instanceOf;
+import static org.junit.platform.testkit.engine.TestExecutionResultConditions.message;
+
+import org.junit.jupiter.api.Test;
+import org.junit.platform.testkit.engine.EngineDiscoveryResults;
+import org.junit.platform.testkit.engine.EngineTestKit;
+import org.junit.platform.testkit.engine.Events;
+import org.opentest4j.AssertionFailedError;
+import org.opentest4j.TestAbortedException;
+
+public class EngineTestKitDiscoveryUnitTest {
+
+ @Test
+ void givenJunitJupiterEngine_whenRunningTestSuite_thenTestsAreDiscovered() {
+ EngineDiscoveryResults results = EngineTestKit.engine("junit-jupiter")
+ .selectors(selectClass(DisplayTest.class))
+ .discover();
+
+ assertEquals("JUnit Jupiter", results.getEngineDescriptor().getDisplayName());
+ assertEquals(emptyList(), results.getDiscoveryIssues());
+ }
+
+ @Test
+ void givenJunitVintageEngine_whenRunningTestSuite_thenTestsAreDiscovered() {
+ EngineDiscoveryResults results = EngineTestKit.engine("junit-vintage")
+ .selectors(selectClass(DisplayTest.class))
+ .discover();
+
+ assertEquals("JUnit Vintage", results.getEngineDescriptor().getDisplayName());
+ }
+
+ @Test
+ void givenTestSuite_whenRunningAllTests_thenCollectHighLevelStats() {
+ EngineTestKit
+ .engine("junit-jupiter")
+ .selectors(selectClass(DisplayTest.class))
+ .execute()
+ .testEvents()
+ .assertStatistics(stats ->
+ stats.started(3).finished(3).succeeded(1).failed(1).skipped(1).aborted(1));
+ }
+
+ @Test
+ void givenTestSuite_whenRunningTestThatAborts_thenCollectDetailedStats() {
+ Events testEvents = EngineTestKit
+ .engine("junit-jupiter")
+ .selectors(selectMethod(DisplayTest.class, "whenAssumptionsFail_thenAborts"))
+ .execute()
+ .testEvents();
+
+ testEvents.assertThatEvents()
+ .haveExactly(1, event(test("whenAssumptionsFail_thenAborts"),
+ abortedWithReason(instanceOf(TestAbortedException.class),
+ message(message -> message.contains("test only runs for mobile")))));
+ }
+
+ @Test
+ void givenTestSuite_whenRunningTestThatFails_thenCollectDetailedStats() {
+ Events testEvents = EngineTestKit
+ .engine("junit-jupiter")
+ .selectors(selectMethod(DisplayTest.class, "whenIncorrect_thenFails"))
+ .execute()
+ .testEvents();
+
+ testEvents.assertThatEvents()
+ .haveExactly(1, event(test("whenIncorrect_thenFails"),
+ finishedWithFailure(instanceOf(AssertionFailedError.class))));
+ }
+
+}