Skip to content

Commit

Permalink
Fixes #2281: Make MockedConstruction stubs close on demand (#2442)
Browse files Browse the repository at this point in the history
MockedConstruction should behave like MockedStatic when we use @mock on it.

Co-authored-by: gbovyn <gatien.bovyn@gmail.com>
  • Loading branch information
temp-droid and Astalaseven committed Oct 6, 2021
1 parent bf480c3 commit e8f26b3
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 3 deletions.
Expand Up @@ -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;
Expand Down Expand Up @@ -181,7 +181,7 @@ private Optional<MockitoSettings> 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));
}
Expand All @@ -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;
Expand Down
@@ -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<String> mockedStatic) {
assertNotNull(mockedStatic);
}

@Test
void create_mocked_static_2(@Mock MockedStatic<String> mockedStatic) {
assertNotNull(mockedStatic);
}

@Test
void create_mocked_construction_1(@Mock MockedConstruction<String> mockConstruction) {
assertNotNull(mockConstruction);
}

@Test
void create_mocked_construction_2(@Mock MockedConstruction<String> mockConstruction) {
assertNotNull(mockConstruction);
}
}

0 comments on commit e8f26b3

Please sign in to comment.