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)))); + } + +}