From 3a0605cef05de548fce3f0bf62bd85ca5935a241 Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Wed, 13 Jan 2016 15:15:27 +0100 Subject: [PATCH] Consolidate Tracker and EventRecorder in JUnit 5 engine tests Issue: #81 --- .../gen5/engine/EngineExecutionListener.java | 34 -------- ...EventRecordingEngineExecutionListener.java | 77 ++++++++++++++++ .../TrackingEngineExecutionListener.java | 87 ------------------- .../junit5/AbstractJUnit5TestEngineTests.java | 22 ++--- .../junit5/ClassLevelCallbackTests.java | 7 +- .../gen5/engine/junit5/DisabledTests.java | 19 ++-- .../engine/junit5/ExceptionHandlingTests.java | 65 +++++++------- .../junit5/InstancePostProcessorTests.java | 7 +- .../junit5/MethodLevelCallbackTests.java | 13 +-- .../engine/junit5/NestedTestClassesTests.java | 26 +++--- .../engine/junit5/ParameterResolverTests.java | 65 +++++++------- .../engine/junit5/StandardTestClassTests.java | 61 ++++++------- .../junit5/TestCaseWithInheritanceTests.java | 49 ++++++----- 13 files changed, 246 insertions(+), 286 deletions(-) delete mode 100644 junit-tests/src/test/java/org/junit/gen5/engine/TrackingEngineExecutionListener.java diff --git a/junit-engine-api/src/main/java/org/junit/gen5/engine/EngineExecutionListener.java b/junit-engine-api/src/main/java/org/junit/gen5/engine/EngineExecutionListener.java index 8a29477b157..88d373b9bf8 100644 --- a/junit-engine-api/src/main/java/org/junit/gen5/engine/EngineExecutionListener.java +++ b/junit-engine-api/src/main/java/org/junit/gen5/engine/EngineExecutionListener.java @@ -10,8 +10,6 @@ package org.junit.gen5.engine; -import java.util.Arrays; - import org.junit.gen5.engine.TestExecutionResult.Status; /** @@ -105,36 +103,4 @@ public interface EngineExecutionListener { */ void executionFinished(TestDescriptor testDescriptor, TestExecutionResult testExecutionResult); - /** - * Combine several {@code listeners} into a single one so that each one is receiving all events. - * - * @param listeners the individual listeners to combine - * @return the combined listener - */ - static EngineExecutionListener combine(EngineExecutionListener... listeners) { - return new EngineExecutionListener() { - - @Override - public void dynamicTestRegistered(TestDescriptor testDescriptor) { - Arrays.stream(listeners).forEach(listener -> listener.dynamicTestRegistered(testDescriptor)); - } - - @Override - public void executionSkipped(TestDescriptor testDescriptor, String reason) { - Arrays.stream(listeners).forEach(listener -> listener.executionSkipped(testDescriptor, reason)); - } - - @Override - public void executionStarted(TestDescriptor testDescriptor) { - Arrays.stream(listeners).forEach(listener -> listener.executionStarted(testDescriptor)); - } - - @Override - public void executionFinished(TestDescriptor testDescriptor, TestExecutionResult testExecutionResult) { - Arrays.stream(listeners).forEach( - listener -> listener.executionFinished(testDescriptor, testExecutionResult)); - - } - }; - } } diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/ExecutionEventRecordingEngineExecutionListener.java b/junit-tests/src/test/java/org/junit/gen5/engine/ExecutionEventRecordingEngineExecutionListener.java index a08307cae95..1159d23b7ff 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/ExecutionEventRecordingEngineExecutionListener.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/ExecutionEventRecordingEngineExecutionListener.java @@ -10,8 +10,19 @@ package org.junit.gen5.engine; +import static java.util.function.Predicate.isEqual; +import static java.util.stream.Collectors.toList; +import static org.junit.gen5.commons.util.FunctionUtils.where; +import static org.junit.gen5.engine.ExecutionEvent.*; +import static org.junit.gen5.engine.ExecutionEvent.Type.*; + import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import org.junit.gen5.engine.ExecutionEvent.Type; +import org.junit.gen5.engine.TestExecutionResult.Status; /** * {@link EngineExecutionListener} that records all events and makes them available to tests. @@ -53,6 +64,72 @@ public List getExecutionEvents() { return executionEvents; } + public Stream eventStream() { + return getExecutionEvents().stream(); + } + + public long getTestSkippedCount() { + return testEventsByType(SKIPPED).count(); + } + + public long getTestStartedCount() { + return testEventsByType(STARTED).count(); + } + + public long getTestFinishedCount() { + return testEventsByType(FINISHED).count(); + } + + public long getTestSuccessfulCount() { + return getTestFinishedCount(Status.SUCCESSFUL); + } + + public long getTestAbortedCount() { + return getTestFinishedCount(Status.ABORTED); + } + + public long getTestFailedCount() { + return getTestFinishedCount(Status.FAILED); + } + + public long getContainerSkippedCount() { + return containerEventsByType(SKIPPED).count(); + } + + public long getContainerStartedCount() { + return containerEventsByType(STARTED).count(); + } + + public long getContainerFinishedCount() { + return containerEventsByType(FINISHED).count(); + } + + public List getFailedTestFinishedEvents() { + return testFinishedEvents(Status.FAILED).collect(toList()); + } + + private long getTestFinishedCount(Status status) { + return testFinishedEvents(status).count(); + } + + private Stream testFinishedEvents(Status status) { + return testEventsByType(FINISHED).filter( + byPayload(TestExecutionResult.class, where(TestExecutionResult::getStatus, isEqual(status)))); + } + + private Stream testEventsByType(Type type) { + return eventsByTypeAndTestDescriptor(type, TestDescriptor::isTest); + } + + private Stream containerEventsByType(Type type) { + return eventsByTypeAndTestDescriptor(type, TestDescriptor::isContainer); + } + + private Stream eventsByTypeAndTestDescriptor(Type type, + Predicate predicate) { + return eventStream().filter(byType(type).and(byTestDescriptor(predicate))); + } + private void addEvent(ExecutionEvent event) { executionEvents.add(event); } diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/TrackingEngineExecutionListener.java b/junit-tests/src/test/java/org/junit/gen5/engine/TrackingEngineExecutionListener.java deleted file mode 100644 index 60140100904..00000000000 --- a/junit-tests/src/test/java/org/junit/gen5/engine/TrackingEngineExecutionListener.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2015-2016 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v1.0 which - * accompanies this distribution and is available at - * - * http://www.eclipse.org/legal/epl-v10.html - */ - -package org.junit.gen5.engine; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -import org.junit.gen5.engine.TestExecutionResult.Status; - -/** - * Simple {@link EngineExecutionListener} that tracks the number of times that certain callbacks are invoked. - * - * @since 5.0 - */ -public class TrackingEngineExecutionListener implements EngineExecutionListener { - - public final AtomicInteger testStartedCount = new AtomicInteger(); - public final AtomicInteger testSucceededCount = new AtomicInteger(); - public final AtomicInteger testSkippedCount = new AtomicInteger(); - public final AtomicInteger testAbortedCount = new AtomicInteger(); - public final AtomicInteger testFailedCount = new AtomicInteger(); - - public final AtomicInteger containerStartedCount = new AtomicInteger(); - public final AtomicInteger containerFinishedCount = new AtomicInteger(); - public final AtomicInteger containerSkippedCount = new AtomicInteger(); - - public final List throwables = new ArrayList<>(); - - @Override - public void dynamicTestRegistered(TestDescriptor testDescriptor) { - // no-op - } - - @Override - public void executionStarted(TestDescriptor testDescriptor) { - if (testDescriptor.isTest()) { - testStartedCount.incrementAndGet(); - } - else { - containerStartedCount.incrementAndGet(); - } - } - - @Override - public void executionSkipped(TestDescriptor testDescriptor, String reason) { - if (testDescriptor.isTest()) { - testSkippedCount.incrementAndGet(); - } - else { - containerSkippedCount.incrementAndGet(); - } - } - - @Override - public void executionFinished(TestDescriptor testDescriptor, TestExecutionResult testExecutionResult) { - if (testDescriptor.isTest()) { - getCounter(testExecutionResult.getStatus()).incrementAndGet(); - } - else { - containerFinishedCount.incrementAndGet(); - } - testExecutionResult.getThrowable().ifPresent(throwables::add); - } - - private AtomicInteger getCounter(Status status) { - switch (status) { - case SUCCESSFUL: - return testSucceededCount; - case ABORTED: - return testAbortedCount; - case FAILED: - return testFailedCount; - default: - throw new IllegalArgumentException("Unknown status: " + status); - } - } - -} diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/AbstractJUnit5TestEngineTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/AbstractJUnit5TestEngineTests.java index 1ae8d470e8b..80636c898a7 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/AbstractJUnit5TestEngineTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/AbstractJUnit5TestEngineTests.java @@ -14,12 +14,10 @@ import org.junit.gen5.api.BeforeEach; import org.junit.gen5.engine.EngineDescriptor; -import org.junit.gen5.engine.EngineExecutionListener; import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.ExecutionRequest; import org.junit.gen5.engine.TestDescriptor; import org.junit.gen5.engine.TestPlanSpecification; -import org.junit.gen5.engine.TrackingEngineExecutionListener; /** * Abstract base class for tests involving the {@link JUnit5TestEngine}. @@ -28,27 +26,21 @@ */ abstract class AbstractJUnit5TestEngineTests { - protected final JUnit5TestEngine engine = new JUnit5TestEngine(); - - protected TrackingEngineExecutionListener tracker; - protected ExecutionEventRecordingEngineExecutionListener eventRecorder; - - private EngineExecutionListener listener; + private final JUnit5TestEngine engine = new JUnit5TestEngine(); @BeforeEach void initListeners() { - tracker = new TrackingEngineExecutionListener(); - eventRecorder = new ExecutionEventRecordingEngineExecutionListener(); - listener = EngineExecutionListener.combine(tracker, eventRecorder); } - protected void executeTestsForClass(Class testClass) { - executeTests(build(forClass(testClass))); + protected ExecutionEventRecordingEngineExecutionListener executeTestsForClass(Class testClass) { + return executeTests(build(forClass(testClass))); } - protected void executeTests(TestPlanSpecification spec) { + protected ExecutionEventRecordingEngineExecutionListener executeTests(TestPlanSpecification spec) { TestDescriptor testDescriptor = discoverTests(spec); - engine.execute(new ExecutionRequest(testDescriptor, listener)); + ExecutionEventRecordingEngineExecutionListener eventRecorder = new ExecutionEventRecordingEngineExecutionListener(); + engine.execute(new ExecutionRequest(testDescriptor, eventRecorder)); + return eventRecorder; } protected EngineDescriptor discoverTests(TestPlanSpecification spec) { diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ClassLevelCallbackTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ClassLevelCallbackTests.java index 7d07bf8ae44..96dacc7a55a 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ClassLevelCallbackTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ClassLevelCallbackTests.java @@ -26,6 +26,7 @@ import org.junit.gen5.api.extension.ExtendWith; import org.junit.gen5.api.extension.ExtensionRegistrar; import org.junit.gen5.api.extension.ExtensionRegistry; +import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.TestPlanSpecification; /** @@ -40,10 +41,10 @@ public class ClassLevelCallbackTests extends AbstractJUnit5TestEngineTests { public void beforeAllAndAfterAllCallbacks() { TestPlanSpecification spec = build(forClass(InstancePerMethodTestCase.class)); - executeTests(spec); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(spec); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testSucceededCount.get(), "# tests succeeded"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); // @formatter:off assertEquals(asList( diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/DisabledTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/DisabledTests.java index 7e1e1a0183b..1c4ea5ed439 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/DisabledTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/DisabledTests.java @@ -29,6 +29,7 @@ import org.junit.gen5.api.extension.ExtendWith; import org.junit.gen5.api.extension.TestExecutionCondition; import org.junit.gen5.api.extension.TestExtensionContext; +import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.TestPlanSpecification; /** @@ -56,22 +57,22 @@ public void tearDown() { @Test public void executeTestsWithDisabledTestClass() { TestPlanSpecification spec = build(forClass(DisabledTestClassTestCase.class)); - executeTests(spec); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(spec); - assertEquals(1, tracker.containerSkippedCount.get(), "# container skipped"); - assertEquals(0, tracker.testStartedCount.get(), "# tests started"); + assertEquals(1L, eventRecorder.getContainerSkippedCount(), "# container skipped"); + assertEquals(0L, eventRecorder.getTestStartedCount(), "# tests started"); } @Test public void executeTestsWithDisabledTestMethods() { TestPlanSpecification spec = build(forClass(DisabledTestMethodsTestCase.class)); - executeTests(spec); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(spec); - assertEquals(2, tracker.testStartedCount.get(), "# tests started"); - assertEquals(2, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(3, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(0, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(0, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(2L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(2L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(3L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(0L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(0L, eventRecorder.getTestFailedCount(), "# tests failed"); } // ------------------------------------------------------------------- diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ExceptionHandlingTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ExceptionHandlingTests.java index a3074235355..3d149fa0814 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ExceptionHandlingTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ExceptionHandlingTests.java @@ -25,6 +25,7 @@ import org.junit.gen5.api.BeforeAll; import org.junit.gen5.api.BeforeEach; import org.junit.gen5.api.Test; +import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.TestPlanSpecification; import org.opentest4j.AssertionFailedError; @@ -39,14 +40,14 @@ public void failureInTestMethodIsRegistered() throws NoSuchMethodException { TestPlanSpecification testPlanSpecification = TestPlanSpecification.build( TestPlanSpecification.forMethod(FailureTestCase.class, method)); - executeTests(testPlanSpecification); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(testPlanSpecification); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); - Throwable failure = tracker.throwables.get(0); - assertEquals(AssertionFailedError.class, failure.getClass()); - assertEquals("always fails", failure.getMessage()); + assertRecordedExecutionEventsContainsExactly(eventRecorder.getFailedTestFinishedEvents(), // + event(test("failingTest"), + finishedWithFailure(allOf(isA(AssertionFailedError.class), message("always fails"))))); } @Test @@ -55,14 +56,14 @@ public void uncheckedExceptionInTestMethodIsRegistered() throws NoSuchMethodExce TestPlanSpecification testPlanSpecification = TestPlanSpecification.build( TestPlanSpecification.forMethod(FailureTestCase.class, method)); - executeTests(testPlanSpecification); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(testPlanSpecification); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); - Throwable failure = tracker.throwables.get(0); - assertEquals(RuntimeException.class, failure.getClass()); - assertEquals("unchecked", failure.getMessage()); + assertRecordedExecutionEventsContainsExactly(eventRecorder.getFailedTestFinishedEvents(), // + event(test("testWithUncheckedException"), + finishedWithFailure(allOf(isA(RuntimeException.class), message("unchecked"))))); } @Test @@ -71,14 +72,14 @@ public void checkedExceptionInTestMethodIsRegistered() throws NoSuchMethodExcept TestPlanSpecification testPlanSpecification = TestPlanSpecification.build( TestPlanSpecification.forMethod(FailureTestCase.class, method)); - executeTests(testPlanSpecification); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(testPlanSpecification); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); - Throwable failure = tracker.throwables.get(0); - assertEquals(IOException.class, failure.getClass()); - assertEquals("checked", failure.getMessage()); + assertRecordedExecutionEventsContainsExactly(eventRecorder.getFailedTestFinishedEvents(), // + event(test("testWithCheckedException"), + finishedWithFailure(allOf(isA(IOException.class), message("checked"))))); } @Test @@ -89,14 +90,13 @@ public void checkedExceptionInBeforeEachIsRegistered() throws NoSuchMethodExcept FailureTestCase.exceptionToThrowInBeforeEach = Optional.of(new IOException("checked")); - executeTests(testPlanSpecification); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(testPlanSpecification); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); - Throwable failure = tracker.throwables.get(0); - assertEquals(IOException.class, failure.getClass()); - assertEquals("checked", failure.getMessage()); + assertRecordedExecutionEventsContainsExactly(eventRecorder.getFailedTestFinishedEvents(), + event(test("succeedingTest"), finishedWithFailure(allOf(isA(IOException.class), message("checked"))))); } @Test @@ -107,14 +107,13 @@ public void checkedExceptionInAfterEachIsRegistered() throws NoSuchMethodExcepti FailureTestCase.exceptionToThrowInAfterEach = Optional.of(new IOException("checked")); - executeTests(testPlanSpecification); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(testPlanSpecification); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); - Throwable failure = tracker.throwables.get(0); - assertEquals(IOException.class, failure.getClass()); - assertEquals("checked", failure.getMessage()); + assertRecordedExecutionEventsContainsExactly(eventRecorder.getFailedTestFinishedEvents(), + event(test("succeedingTest"), finishedWithFailure(allOf(isA(IOException.class), message("checked"))))); } @Test @@ -125,7 +124,7 @@ public void checkedExceptionInAfterEachIsSuppressedByExceptionInTest() throws No FailureTestCase.exceptionToThrowInAfterEach = Optional.of(new IOException("checked")); - executeTests(testPlanSpecification); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(testPlanSpecification); assertRecordedExecutionEventsContainsExactly(eventRecorder.getExecutionEvents(), // event(engine(), started()), // @@ -148,7 +147,7 @@ public void checkedExceptionInBeforeAllIsRegistered() throws NoSuchMethodExcepti FailureTestCase.exceptionToThrowInBeforeAll = Optional.of(new IOException("checked")); - executeTests(testPlanSpecification); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(testPlanSpecification); assertRecordedExecutionEventsContainsExactly(eventRecorder.getExecutionEvents(), // event(engine(), started()), // @@ -166,7 +165,7 @@ public void checkedExceptionInAfterAllIsRegistered() throws NoSuchMethodExceptio FailureTestCase.exceptionToThrowInAfterAll = Optional.of(new IOException("checked")); - executeTests(testPlanSpecification); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(testPlanSpecification); assertRecordedExecutionEventsContainsExactly(eventRecorder.getExecutionEvents(), // event(engine(), started()), // diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/InstancePostProcessorTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/InstancePostProcessorTests.java index 1232a7e131a..759c593c49d 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/InstancePostProcessorTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/InstancePostProcessorTests.java @@ -23,6 +23,7 @@ import org.junit.gen5.api.extension.ExtendWith; import org.junit.gen5.api.extension.InstancePostProcessor; import org.junit.gen5.api.extension.TestExtensionContext; +import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.TestPlanSpecification; /** @@ -34,10 +35,10 @@ public class InstancePostProcessorTests extends AbstractJUnit5TestEngineTests { public void instancePostProcessorInTopLevelClass() { TestPlanSpecification spec = build(forClass(OuterTestCase.class)); - executeTests(spec); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(spec); - assertEquals(2, tracker.testStartedCount.get(), "# tests started"); - assertEquals(2, tracker.testSucceededCount.get(), "# tests succeeded"); + assertEquals(2L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(2L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); // @formatter:off assertEquals(asList( diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/MethodLevelCallbackTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/MethodLevelCallbackTests.java index ef92878880b..d6e96ad2319 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/MethodLevelCallbackTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/MethodLevelCallbackTests.java @@ -27,6 +27,7 @@ import org.junit.gen5.api.extension.ExtensionRegistrar; import org.junit.gen5.api.extension.ExtensionRegistry; import org.junit.gen5.api.extension.TestExtensionContext; +import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.TestPlanSpecification; /** @@ -41,13 +42,13 @@ public class MethodLevelCallbackTests extends AbstractJUnit5TestEngineTests { public void beforeEachAndAfterEachCallbacks() { TestPlanSpecification spec = build(forClass(OuterTestCase.class)); - executeTests(spec); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(spec); - assertEquals(2, tracker.testStartedCount.get(), "# tests started"); - assertEquals(2, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(0, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(0, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(0, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(2L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(2L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(0L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(0L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(0L, eventRecorder.getTestFailedCount(), "# tests failed"); // @formatter:off diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/NestedTestClassesTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/NestedTestClassesTests.java index 2f5ee04cfa9..24262c22cf3 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/NestedTestClassesTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/NestedTestClassesTests.java @@ -19,6 +19,7 @@ import org.junit.gen5.api.Nested; import org.junit.gen5.api.Test; import org.junit.gen5.engine.EngineDescriptor; +import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.TestPlanSpecification; /** @@ -38,14 +39,14 @@ public void nestedTestsAreCorrectlyDiscovered() { @Test public void nestedTestsAreExecuted() { - executeTestsForClass(TestCaseWithNesting.class); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass(TestCaseWithNesting.class); - assertEquals(3, tracker.testStartedCount.get(), "# tests started"); - assertEquals(2, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(3L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(2L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); - assertEquals(3, tracker.containerStartedCount.get(), "# containers started"); - assertEquals(3, tracker.containerFinishedCount.get(), "# containers finished"); + assertEquals(3L, eventRecorder.getContainerStartedCount(), "# containers started"); + assertEquals(3L, eventRecorder.getContainerFinishedCount(), "# containers finished"); } @Test @@ -57,14 +58,15 @@ public void doublyNestedTestsAreCorrectlyDiscovered() { @Test public void doublyNestedTestsAreExecuted() { - executeTestsForClass(TestCaseWithDoubleNesting.class); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass( + TestCaseWithDoubleNesting.class); - assertEquals(5, tracker.testStartedCount.get(), "# tests started"); - assertEquals(3, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(2, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(5L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(3L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(2L, eventRecorder.getTestFailedCount(), "# tests failed"); - assertEquals(4, tracker.containerStartedCount.get(), "# containers started"); - assertEquals(4, tracker.containerFinishedCount.get(), "# containers finished"); + assertEquals(4L, eventRecorder.getContainerStartedCount(), "# containers started"); + assertEquals(4L, eventRecorder.getContainerFinishedCount(), "# containers finished"); assertAll("before each counts", // () -> assertEquals(5, TestCaseWithDoubleNesting.beforeTopCount), diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ParameterResolverTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ParameterResolverTests.java index 3b019e04ff2..05dd465e940 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ParameterResolverTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/ParameterResolverTests.java @@ -10,9 +10,7 @@ package org.junit.gen5.engine.junit5; -import static org.junit.gen5.api.Assertions.assertEquals; -import static org.junit.gen5.api.Assertions.assertNotNull; -import static org.junit.gen5.api.Assertions.assertTrue; +import static org.junit.gen5.api.Assertions.*; import org.junit.gen5.api.AfterAll; import org.junit.gen5.api.AfterEach; @@ -23,6 +21,7 @@ import org.junit.gen5.api.TestInfo; import org.junit.gen5.api.extension.ExtendWith; import org.junit.gen5.api.extension.MethodParameterResolver; +import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.junit5.execution.injection.sample.CustomAnnotation; import org.junit.gen5.engine.junit5.execution.injection.sample.CustomAnnotationParameterResolver; import org.junit.gen5.engine.junit5.execution.injection.sample.CustomType; @@ -38,46 +37,50 @@ public class ParameterResolverTests extends AbstractJUnit5TestEngineTests { @Test public void executeTestsForMethodInjectionCases() { - executeTestsForClass(MethodInjectionTestCase.class); - - assertEquals(8, tracker.testStartedCount.get(), "# tests started"); - assertEquals(7, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(0, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(0, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass( + MethodInjectionTestCase.class); + + assertEquals(8L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(7L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(0L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(0L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); } @Test public void executeTestsForMethodInjectionInBeforeAndAfterEachMethods() { - executeTestsForClass(BeforeAndAfterMethodInjectionTestCase.class); - - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(0, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(0, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(0, tracker.testFailedCount.get(), "# tests failed"); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass( + BeforeAndAfterMethodInjectionTestCase.class); + + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(0L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(0L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(0L, eventRecorder.getTestFailedCount(), "# tests failed"); } @Test public void executeTestsForMethodInjectionInBeforeAndAfterAllMethods() { - executeTestsForClass(BeforeAndAfterAllMethodInjectionTestCase.class); - - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(0, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(0, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(0, tracker.testFailedCount.get(), "# tests failed"); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass( + BeforeAndAfterAllMethodInjectionTestCase.class); + + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(0L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(0L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(0L, eventRecorder.getTestFailedCount(), "# tests failed"); } @Test public void executeTestsForMethodWithExtendWithAnnotation() { - executeTestsForClass(ExtendWithOnMethodTestCase.class); - - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(0, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(0, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(0, tracker.testFailedCount.get(), "# tests failed"); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass( + ExtendWithOnMethodTestCase.class); + + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(0L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(0L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(0L, eventRecorder.getTestFailedCount(), "# tests failed"); } // ------------------------------------------------------------------- diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/StandardTestClassTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/StandardTestClassTests.java index 97c7d5bd4e4..3b61007d9ed 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/StandardTestClassTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/StandardTestClassTests.java @@ -17,6 +17,7 @@ import org.junit.gen5.api.BeforeEach; import org.junit.gen5.api.Test; import org.junit.gen5.engine.EngineDescriptor; +import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.TestPlanSpecification; import org.opentest4j.TestAbortedException; @@ -57,27 +58,27 @@ public void moreThanOneTestClassIsExecuted() { TestPlanSpecification.forClass(FirstOfTwoTestCases.class), TestPlanSpecification.forClass(SecondOfTwoTestCases.class)); - executeTests(testPlanSpecification); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(testPlanSpecification); - assertEquals(6, tracker.testStartedCount.get(), "# tests started"); - assertEquals(5, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(6L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(5L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); - assertEquals(3, tracker.containerStartedCount.get(), "# containers started"); - assertEquals(3, tracker.containerFinishedCount.get(), "# containers finished"); + assertEquals(3L, eventRecorder.getContainerStartedCount(), "# containers started"); + assertEquals(3L, eventRecorder.getContainerFinishedCount(), "# containers finished"); } @Test public void allTestsInClassAreRunWithBeforeEach() { - executeTestsForClass(MyStandardTestCase.class); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass(MyStandardTestCase.class); - assertEquals(4, tracker.testStartedCount.get(), "# tests started"); - assertEquals(2, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(1, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(4L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(2L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(1L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); - assertEquals(2, tracker.containerStartedCount.get(), "# containers started"); - assertEquals(2, tracker.containerFinishedCount.get(), "# containers finished"); + assertEquals(2L, eventRecorder.getContainerStartedCount(), "# containers started"); + assertEquals(2L, eventRecorder.getContainerFinishedCount(), "# containers finished"); assertEquals(4, MyStandardTestCase.countBefore1, "# before1 calls"); assertEquals(4, MyStandardTestCase.countBefore2, "# before2 calls"); @@ -85,39 +86,41 @@ public void allTestsInClassAreRunWithBeforeEach() { @Test public void allTestsInClassAreRunWithAfterEach() { - executeTestsForClass(MyStandardTestCase.class); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass(MyStandardTestCase.class); - assertEquals(4, tracker.testStartedCount.get(), "# tests started"); + assertEquals(4L, eventRecorder.getTestStartedCount(), "# tests started"); assertEquals(4, MyStandardTestCase.countAfter, "# after each calls"); - assertEquals(2, tracker.containerStartedCount.get(), "# containers started"); - assertEquals(2, tracker.containerFinishedCount.get(), "# containers finished"); + assertEquals(2L, eventRecorder.getContainerStartedCount(), "# containers started"); + assertEquals(2L, eventRecorder.getContainerFinishedCount(), "# containers finished"); } @Test public void testsFailWhenBeforeEachFails() { - executeTestsForClass(TestCaseWithFailingBefore.class); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass( + TestCaseWithFailingBefore.class); - assertEquals(2, tracker.testStartedCount.get(), "# tests started"); - assertEquals(0, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(2, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(2L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(0L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(2L, eventRecorder.getTestFailedCount(), "# tests failed"); - assertEquals(2, tracker.containerStartedCount.get(), "# containers started"); - assertEquals(2, tracker.containerFinishedCount.get(), "# containers finished"); + assertEquals(2L, eventRecorder.getContainerStartedCount(), "# containers started"); + assertEquals(2L, eventRecorder.getContainerFinishedCount(), "# containers finished"); assertEquals(2, TestCaseWithFailingBefore.countBefore, "# before each calls"); } @Test public void testsFailWhenAfterEachFails() { - executeTestsForClass(TestCaseWithFailingAfter.class); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass( + TestCaseWithFailingAfter.class); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(0, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(0L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); - assertEquals(2, tracker.containerStartedCount.get(), "# containers started"); - assertEquals(2, tracker.containerFinishedCount.get(), "# containers finished"); + assertEquals(2L, eventRecorder.getContainerStartedCount(), "# containers started"); + assertEquals(2L, eventRecorder.getContainerFinishedCount(), "# containers finished"); assertTrue(TestCaseWithFailingAfter.testExecuted, "test executed?"); } diff --git a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/TestCaseWithInheritanceTests.java b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/TestCaseWithInheritanceTests.java index be20e8e1cbf..6c48ce722c1 100644 --- a/junit-tests/src/test/java/org/junit/gen5/engine/junit5/TestCaseWithInheritanceTests.java +++ b/junit-tests/src/test/java/org/junit/gen5/engine/junit5/TestCaseWithInheritanceTests.java @@ -17,6 +17,7 @@ import org.junit.gen5.api.AfterEach; import org.junit.gen5.api.BeforeEach; import org.junit.gen5.api.Test; +import org.junit.gen5.engine.ExecutionEventRecordingEngineExecutionListener; import org.junit.gen5.engine.TestPlanSpecification; /** @@ -38,13 +39,13 @@ void initStatics() { public void executeAllTestsInClass() { LocalTestCase.countAfterInvoked = 0; - executeTestsForClass(LocalTestCase.class); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTestsForClass(LocalTestCase.class); - assertEquals(6, tracker.testStartedCount.get(), "# tests started"); - assertEquals(3, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(0, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(1, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(2, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(6L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(3L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(0L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(1L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(2L, eventRecorder.getTestFailedCount(), "# tests failed"); assertEquals(6, LocalTestCase.countBeforeInvoked, "# before calls"); assertEquals(6, LocalTestCase.countAfterInvoked, "# after calls"); @@ -57,13 +58,13 @@ public void executeSingleTest() { TestPlanSpecification spec = build(forUniqueId( "junit5:org.junit.gen5.engine.junit5.TestCaseWithInheritanceTests$LocalTestCase#alwaysPasses()")); - executeTests(spec); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(spec); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(0, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(0, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(0, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(0L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(0L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(0L, eventRecorder.getTestFailedCount(), "# tests failed"); } @Test @@ -71,13 +72,13 @@ public void executeTestDeclaredInSuperClass() { TestPlanSpecification spec = build(forUniqueId( "junit5:org.junit.gen5.engine.junit5.TestCaseWithInheritanceTests$LocalTestCase#superclassTest()")); - executeTests(spec); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(spec); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(1, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(0, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(0, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(0, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(1L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(0L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(0L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(0L, eventRecorder.getTestFailedCount(), "# tests failed"); assertEquals(1, LocalTestCase.countBeforeInvoked, "# after calls"); assertEquals(1, LocalTestCase.countAfterInvoked, "# after calls"); @@ -91,13 +92,13 @@ public void executeTestWithExceptionThrownInAfterMethod() { TestPlanSpecification spec = build(forUniqueId( "junit5:org.junit.gen5.engine.junit5.TestCaseWithInheritanceTests$LocalTestCase#throwExceptionInAfterMethod()")); - executeTests(spec); + ExecutionEventRecordingEngineExecutionListener eventRecorder = executeTests(spec); - assertEquals(1, tracker.testStartedCount.get(), "# tests started"); - assertEquals(0, tracker.testSucceededCount.get(), "# tests succeeded"); - assertEquals(0, tracker.testSkippedCount.get(), "# tests skipped"); - assertEquals(0, tracker.testAbortedCount.get(), "# tests aborted"); - assertEquals(1, tracker.testFailedCount.get(), "# tests failed"); + assertEquals(1L, eventRecorder.getTestStartedCount(), "# tests started"); + assertEquals(0L, eventRecorder.getTestSuccessfulCount(), "# tests succeeded"); + assertEquals(0L, eventRecorder.getTestSkippedCount(), "# tests skipped"); + assertEquals(0L, eventRecorder.getTestAbortedCount(), "# tests aborted"); + assertEquals(1L, eventRecorder.getTestFailedCount(), "# tests failed"); } // -------------------------------------------------------------------