From 5cd3e79da2ce620645a8ea666f4ed9d502833b39 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 12 Aug 2016 16:48:08 +0200 Subject: [PATCH] WIP on Mockito --- .../boot/test/mock/mockito/MockReset.java | 32 ++++++++++++++++--- .../boot/test/mock/mockito/SpyDefinition.java | 6 +--- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/spring-boot-test/src/main/java/org/springframework/boot/test/mock/mockito/MockReset.java b/spring-boot-test/src/main/java/org/springframework/boot/test/mock/mockito/MockReset.java index f0042116d561..ed1ee8b8d64a 100644 --- a/spring-boot-test/src/main/java/org/springframework/boot/test/mock/mockito/MockReset.java +++ b/spring-boot-test/src/main/java/org/springframework/boot/test/mock/mockito/MockReset.java @@ -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 @@ -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. @@ -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) { diff --git a/spring-boot-test/src/main/java/org/springframework/boot/test/mock/mockito/SpyDefinition.java b/spring-boot-test/src/main/java/org/springframework/boot/test/mock/mockito/SpyDefinition.java index 46f69b0a617d..27e4f65d9917 100644 --- a/spring-boot-test/src/main/java/org/springframework/boot/test/mock/mockito/SpyDefinition.java +++ b/spring-boot-test/src/main/java/org/springframework/boot/test/mock/mockito/SpyDefinition.java @@ -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; @@ -32,8 +30,6 @@ */ class SpyDefinition extends Definition { - private MockUtil mockUtil = new MockUtil(); - private static final int MULTIPLIER = 31; private final Class classToSpy; @@ -86,7 +82,7 @@ public T createSpy(Object instance) { public 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());