Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mockito forward compatibility #6638

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,21 @@

package org.springframework.boot.test.mock.mockito;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;

import org.mockito.MockSettings;
import org.mockito.MockingDetails;
import org.mockito.Mockito;
import org.mockito.internal.util.DefaultMockingDetails;
import org.mockito.internal.util.MockUtil;
import org.mockito.listeners.InvocationListener;
import org.mockito.listeners.MethodInvocationReport;
import org.mockito.mock.MockCreationSettings;

import org.springframework.util.Assert;
import org.springframework.util.ReflectionUtils;

/**
* Reset strategy used on a mock bean. Usually applied to a mock via the
Expand Down Expand Up @@ -53,8 +58,6 @@ public enum MockReset {
*/
NONE;

private static final MockUtil util = new MockUtil();

/**
* Create {@link MockSettings settings} to be used with mocks where reset should occur
* before each test method runs.
Expand Down Expand Up @@ -105,8 +108,27 @@ public static MockSettings apply(MockReset reset, MockSettings settings) {
@SuppressWarnings("rawtypes")
static MockReset get(Object mock) {
MockReset reset = MockReset.NONE;
if (util.isMock(mock)) {
MockCreationSettings settings = util.getMockSettings(mock);
MockingDetails details = Mockito.mockingDetails(mock);
MockCreationSettings settings;
if (details.isMock()) {
try {
// Mockito 1.9.x
Field mockUtil = ReflectionUtils.findField(DefaultMockingDetails.class, "delegate", MockUtil.class);
MockUtil field = (MockUtil) ReflectionUtils.getField(mockUtil, details);
settings = field.getMockSettings(mock);
} catch (IllegalStateException e) {
// Mockito 2.x.x
try {
Method method = MockUtil.class.getMethod("getMockSettings", Object.class);
settings = (MockCreationSettings) method.invoke(null, mock);
} catch (NoSuchMethodException e1) {
throw new IllegalStateException(e1);
} catch (InvocationTargetException e1) {
throw new IllegalStateException(e1);
} catch (IllegalAccessException e1) {
throw new IllegalStateException(e1);
}
}
List listeners = settings.getInvocationListeners();
for (Object listener : listeners) {
if (listener instanceof ResetInvocationListener) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@

import org.mockito.MockSettings;
import org.mockito.Mockito;
import org.mockito.internal.util.MockUtil;

import org.springframework.core.style.ToStringCreator;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
Expand All @@ -32,8 +30,6 @@
*/
class SpyDefinition extends Definition {

private MockUtil mockUtil = new MockUtil();

private static final int MULTIPLIER = 31;

private final Class<?> classToSpy;
Expand Down Expand Up @@ -86,7 +82,7 @@ public <T> T createSpy(Object instance) {
public <T> T createSpy(String name, Object instance) {
Assert.notNull(instance, "Instance must not be null");
Assert.isInstanceOf(this.classToSpy, instance);
if (this.mockUtil.isSpy(instance)) {
if (Mockito.mockingDetails(instance).isSpy()) {
return (T) instance;
}
MockSettings settings = MockReset.withSettings(getReset());
Expand Down