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 c2cf37d5fe..220b7f4509 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 @@ -21,9 +21,9 @@ import org.junit.jupiter.api.extension.ParameterResolutionException; import org.junit.jupiter.api.extension.ParameterResolver; import org.mockito.Mock; -import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.MockitoSession; +import org.mockito.ScopedMock; import org.mockito.internal.configuration.MockAnnotationProcessor; import org.mockito.internal.configuration.plugins.Plugins; import org.mockito.internal.session.MockitoSessionLoggerAdapter; @@ -181,7 +181,7 @@ private Optional retrieveAnnotationFromTestClasses(final Extens @Override @SuppressWarnings("unchecked") public void afterEach(ExtensionContext context) { - context.getStore(MOCKITO).remove(MOCKS, Set.class).forEach(mock -> ((MockedStatic) mock).closeOnDemand()); + context.getStore(MOCKITO).remove(MOCKS, Set.class).forEach(mock -> ((ScopedMock) mock).closeOnDemand()); context.getStore(MOCKITO).remove(SESSION, MockitoSession.class) .finishMocking(context.getExecutionException().orElse(null)); } @@ -200,7 +200,7 @@ public Object resolveParameter(ParameterContext parameterContext, ExtensionConte parameter.getType(), parameter::getParameterizedType, parameter.getName()); - if (mock instanceof MockedStatic) { + if (mock instanceof ScopedMock) { context.getStore(MOCKITO).get(MOCKS, Set.class).add(mock); } return mock; diff --git a/subprojects/junitJupiterInlineMockMakerExtensionTest/src/test/java/org/mockitousage/CloseOnDemandTest.java b/subprojects/junitJupiterInlineMockMakerExtensionTest/src/test/java/org/mockitousage/CloseOnDemandTest.java new file mode 100644 index 0000000000..cfb66cf96a --- /dev/null +++ b/subprojects/junitJupiterInlineMockMakerExtensionTest/src/test/java/org/mockitousage/CloseOnDemandTest.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockitousage; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.MockedConstruction; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * Tests to assert that ScopedMock mocks are properly closed on scope exit. + */ +@ExtendWith(MockitoExtension.class) +class CloseOnDemandTest { + + @Test + void create_mocked_static_1(@Mock MockedStatic mockedStatic) { + assertNotNull(mockedStatic); + } + + @Test + void create_mocked_static_2(@Mock MockedStatic mockedStatic) { + assertNotNull(mockedStatic); + } + + @Test + void create_mocked_construction_1(@Mock MockedConstruction mockConstruction) { + assertNotNull(mockConstruction); + } + + @Test + void create_mocked_construction_2(@Mock MockedConstruction mockConstruction) { + assertNotNull(mockConstruction); + } +}