diff --git a/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java b/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java index 6219506634..32609c38b4 100644 --- a/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java +++ b/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java @@ -5,6 +5,13 @@ package org.mockito.junit.jupiter; +import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.create; +import static org.junit.platform.commons.support.AnnotationSupport.findAnnotation; + +import java.lang.reflect.Parameter; +import java.util.List; +import java.util.Optional; + import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; @@ -21,13 +28,6 @@ import org.mockito.junit.MockitoJUnitRunner; import org.mockito.quality.Strictness; -import java.lang.reflect.Parameter; -import java.util.List; -import java.util.Optional; - -import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.create; -import static org.junit.platform.commons.support.AnnotationSupport.findAnnotation; - /** * Extension that initializes mocks and handles strict stubbings. This extension is the JUnit Jupiter equivalent * of our JUnit4 {@link MockitoJUnitRunner}. @@ -178,7 +178,7 @@ private Optional retrieveAnnotationFromTestClasses(final Extens @Override public void afterEach(ExtensionContext context) { context.getStore(MOCKITO).remove(SESSION, MockitoSession.class) - .finishMocking(); + .finishMocking(context.getExecutionException().orElse(null)); } @Override @@ -186,7 +186,6 @@ public boolean supportsParameter(ParameterContext parameterContext, ExtensionCon return parameterContext.isAnnotated(Mock.class); } - @SuppressWarnings("ConstantConditions") @Override public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { final Parameter parameter = parameterContext.getParameter(); diff --git a/subprojects/junit-jupiter/src/test/java/org/mockitousage/StrictnessTest.java b/subprojects/junit-jupiter/src/test/java/org/mockitousage/StrictnessTest.java index 560b2f1c73..31a5d6a649 100644 --- a/subprojects/junit-jupiter/src/test/java/org/mockitousage/StrictnessTest.java +++ b/subprojects/junit-jupiter/src/test/java/org/mockitousage/StrictnessTest.java @@ -17,8 +17,8 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.exceptions.misusing.UnnecessaryStubbingException; -import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.junit.jupiter.MockitoExtension; +import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; import java.util.function.Function; @@ -31,7 +31,6 @@ * We then assert on the actual test run output, to see if test actually failed as a result * of our extension. */ -@SuppressWarnings("ConstantConditions") class StrictnessTest { @MockitoSettings(strictness = Strictness.STRICT_STUBS) @@ -53,6 +52,31 @@ void session_checks_for_strict_stubs() { assertThat(result.getThrowable().get()).isInstanceOf(UnnecessaryStubbingException.class); } + static class MyAssertionError extends AssertionError { + } + + @MockitoSettings(strictness = Strictness.STRICT_STUBS) + static class StrictStubsNotReportedOnTestFailure { + @Mock + private Function rootMock; + + @Test + void should_not_throw_exception_on_strict_stubs_because_of_test_failure() { + Mockito.when(rootMock.apply(10)).thenReturn("Foo"); + throw new MyAssertionError(); + } + } + + @Test + void session_does_not_check_for_strict_stubs_on_test_failure() { + TestExecutionResult result = invokeTestClassAndRetrieveMethodResult(StrictStubsNotReportedOnTestFailure.class); + + assertThat(result.getStatus()).isEqualTo(TestExecutionResult.Status.FAILED); + Throwable throwable = result.getThrowable().get(); + assertThat(throwable).isInstanceOf(MyAssertionError.class); + assertThat(throwable.getSuppressed()).isEmpty(); + } + @MockitoSettings(strictness = Strictness.STRICT_STUBS) static class ConfiguredStrictStubs { @Nested