diff --git a/src/main/java/org/junit/support/testng/engine/ExecutionListener.java b/src/main/java/org/junit/support/testng/engine/ExecutionListener.java index bbf1a05..1c77bd0 100644 --- a/src/main/java/org/junit/support/testng/engine/ExecutionListener.java +++ b/src/main/java/org/junit/support/testng/engine/ExecutionListener.java @@ -237,8 +237,11 @@ private static Stream throwables(Set results) { private static Throwable chain(Stream failures) { Iterator iterator = failures.iterator(); - Throwable throwable = iterator.next(); - iterator.forEachRemaining(throwable::addSuppressed); + Throwable throwable = null; + if (iterator.hasNext()) { + throwable = iterator.next(); + iterator.forEachRemaining(throwable::addSuppressed); + } return throwable; } diff --git a/src/test/java/org/junit/support/testng/engine/AbstractIntegrationTests.java b/src/test/java/org/junit/support/testng/engine/AbstractIntegrationTests.java index a3148d9..318325e 100644 --- a/src/test/java/org/junit/support/testng/engine/AbstractIntegrationTests.java +++ b/src/test/java/org/junit/support/testng/engine/AbstractIntegrationTests.java @@ -11,18 +11,24 @@ package org.junit.support.testng.engine; import static java.util.function.Predicate.isEqual; +import static org.assertj.core.api.Assertions.allOf; import static org.junit.platform.commons.util.FunctionUtils.where; +import static org.junit.platform.engine.TestExecutionResult.Status.ABORTED; import static org.junit.platform.testkit.engine.Event.byTestDescriptor; import static org.junit.platform.testkit.engine.EventConditions.container; import static org.junit.platform.testkit.engine.EventConditions.displayName; import static org.junit.platform.testkit.engine.EventConditions.event; +import static org.junit.platform.testkit.engine.EventConditions.finished; import static org.junit.platform.testkit.engine.EventConditions.uniqueIdSubstring; +import static org.junit.platform.testkit.engine.TestExecutionResultConditions.status; import java.nio.file.Path; +import java.util.Optional; import org.assertj.core.api.Condition; import org.junit.jupiter.api.io.TempDir; import org.junit.platform.engine.TestDescriptor; +import org.junit.platform.engine.TestExecutionResult; import org.junit.platform.testkit.engine.EngineTestKit; import org.junit.platform.testkit.engine.Event; @@ -48,4 +54,13 @@ static Condition legacyReportingName(String legacyReportingName) { byTestDescriptor(where(TestDescriptor::getLegacyReportingName, isEqual(legacyReportingName))), "descriptor with legacy reporting name '%s'", legacyReportingName); } + + static Condition abortedWithoutReason() { + return finished(allOf(status(ABORTED), emptyThrowable())); + } + + static Condition emptyThrowable() { + return new Condition<>(where(TestExecutionResult::getThrowable, Optional::isEmpty), "throwable is empty"); + } + } diff --git a/src/test/java/org/junit/support/testng/engine/ConfigurationMethodIntegrationTests.java b/src/test/java/org/junit/support/testng/engine/ConfigurationMethodIntegrationTests.java index 92f4218..d258235 100644 --- a/src/test/java/org/junit/support/testng/engine/ConfigurationMethodIntegrationTests.java +++ b/src/test/java/org/junit/support/testng/engine/ConfigurationMethodIntegrationTests.java @@ -74,7 +74,7 @@ void reportsFailureFromEarlyEngineLevelConfigurationMethodAsAborted(Class tes event(testClass(testClass), started()), // event(test("method:test()"), started()), // event(test("method:test()"), abortedWithReason(message("boom"))), // - event(testClass(testClass), finishedSuccessfully()), // + event(testClass(testClass), abortedWithoutReason()), // event(engine(), finishedWithFailure(message("boom")))); } diff --git a/src/testFixtures/java/example/configuration/methods/FailingBeforeSuiteConfigurationMethodTestCase.java b/src/testFixtures/java/example/configuration/methods/FailingBeforeSuiteConfigurationMethodTestCase.java index b7c959a..470bb19 100644 --- a/src/testFixtures/java/example/configuration/methods/FailingBeforeSuiteConfigurationMethodTestCase.java +++ b/src/testFixtures/java/example/configuration/methods/FailingBeforeSuiteConfigurationMethodTestCase.java @@ -10,6 +10,7 @@ package example.configuration.methods; +import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; @@ -20,6 +21,11 @@ public void beforeSuite() { throw new AssertionError("boom"); } + @BeforeMethod + public void beforeMethod() { + // never called + } + @Test public void test() { // never called diff --git a/src/testFixtures/java/example/configuration/methods/FailingBeforeTestConfigurationMethodTestCase.java b/src/testFixtures/java/example/configuration/methods/FailingBeforeTestConfigurationMethodTestCase.java index 17468cb..63a9e95 100644 --- a/src/testFixtures/java/example/configuration/methods/FailingBeforeTestConfigurationMethodTestCase.java +++ b/src/testFixtures/java/example/configuration/methods/FailingBeforeTestConfigurationMethodTestCase.java @@ -10,6 +10,7 @@ package example.configuration.methods; +import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; @@ -20,6 +21,11 @@ public void beforeTest() { throw new AssertionError("boom"); } + @BeforeMethod + public void beforeMethod() { + // never called + } + @Test public void test() { // never called