From dea6220f4d216a73c5dfc26082cf40654c439d6b Mon Sep 17 00:00:00 2001 From: sam-gardner Date: Wed, 22 Oct 2025 11:41:11 +0100 Subject: [PATCH] BAEL-9376 A guide to engine test kit --- testing-modules/junit-5-advanced-3/pom.xml | 19 ++++- .../src/main/java/enginetestkit/Display.java | 21 +++++ .../src/main/java/enginetestkit/Platform.java | 6 ++ .../baeldung/enginetestkit/DisplayTest.java | 39 +++++++++ .../EngineTestKitDiscoveryUnitTest.java | 81 +++++++++++++++++++ 5 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 testing-modules/junit-5-advanced-3/src/main/java/enginetestkit/Display.java create mode 100644 testing-modules/junit-5-advanced-3/src/main/java/enginetestkit/Platform.java create mode 100644 testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/enginetestkit/DisplayTest.java create mode 100644 testing-modules/junit-5-advanced-3/src/test/java/com/baeldung/enginetestkit/EngineTestKitDiscoveryUnitTest.java 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..340c5556a68e --- /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 succeeds() { + assertEquals(1000, display.getHeight()); + } + + @Test + void fails() { + assertEquals(500, display.getHeight()); + } + + @Test + @Disabled("Flakey test needs investigating") + void skips() { + assertEquals(999, display.getHeight()); + } + + @Test + void aborts() { + 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..33abb8482658 --- /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 verifyTestEngineDiscovery() { + EngineDiscoveryResults results = EngineTestKit.engine("junit-jupiter") + .selectors(selectClass(DisplayTest.class)) + .discover(); + + assertEquals("JUnit Jupiter", results.getEngineDescriptor().getDisplayName()); + assertEquals(emptyList(), results.getDiscoveryIssues()); + } + + @Test + void verifyVintageDiscovery() { + EngineDiscoveryResults results = EngineTestKit.engine("junit-vintage") + .selectors(selectClass(DisplayTest.class)) + .discover(); + + assertEquals("JUnit Vintage", results.getEngineDescriptor().getDisplayName()); + } + + @Test + void verifyHighLevelTestStats() { + 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 verifyTestAbortion() { + Events testEvents = EngineTestKit + .engine("junit-jupiter") + .selectors(selectMethod(DisplayTest.class, "aborts")) + .execute() + .testEvents(); + + testEvents.assertThatEvents() + .haveExactly(1, event(test("aborts"), + abortedWithReason(instanceOf(TestAbortedException.class), + message(message -> message.contains("test only runs for mobile"))))); + } + + @Test + void verifyTestFailure() { + Events testEvents = EngineTestKit + .engine("junit-jupiter") + .selectors(selectMethod(DisplayTest.class, "fails")) + .execute() + .testEvents(); + + testEvents.assertThatEvents() + .haveExactly(1, event(test("fails"), + finishedWithFailure(instanceOf(AssertionFailedError.class)))); + } + +}