From df776897548ae88fb69471a1afe0822d3bcdae0a Mon Sep 17 00:00:00 2001 From: Rafael Winterhalter Date: Tue, 28 Jul 2020 00:50:49 +0200 Subject: [PATCH] Does not include static mocks in regular listener logic as it might distort existing mock collectors that do not expect scoped mocks. Fixes #1988. --- .../invocation/InterceptedInvocation.java | 24 ++++++++++++++ .../internal/progress/MockingProgress.java | 2 ++ .../progress/MockingProgressImpl.java | 9 ++++++ .../listeners/MockCreationListener.java | 8 +++++ .../org/mockitoinline/StaticMockTest.java | 6 ---- .../org/mockitoinline/StaticRuleTest.java | 31 +++++++++++++++++++ .../org/mockitoinline/StaticRunnerTest.java | 28 +++++++++++++++++ 7 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 subprojects/inline/src/test/java/org/mockitoinline/StaticRuleTest.java create mode 100644 subprojects/inline/src/test/java/org/mockitoinline/StaticRunnerTest.java diff --git a/src/main/java/org/mockito/internal/invocation/InterceptedInvocation.java b/src/main/java/org/mockito/internal/invocation/InterceptedInvocation.java index 57bb4b71e7..d0d842becc 100644 --- a/src/main/java/org/mockito/internal/invocation/InterceptedInvocation.java +++ b/src/main/java/org/mockito/internal/invocation/InterceptedInvocation.java @@ -141,6 +141,30 @@ public Object callRealMethod() throws Throwable { return realMethod.invoke(); } + /** + * @deprecated Not used by Mockito but by mockito-scala + */ + @Deprecated + public MockReference getMockRef() { + return mockRef; + } + + /** + * @deprecated Not used by Mockito but by mockito-scala + */ + @Deprecated + public MockitoMethod getMockitoMethod() { + return mockitoMethod; + } + + /** + * @deprecated Not used by Mockito but by mockito-scala + */ + @Deprecated + public RealMethod getRealMethod() { + return realMethod; + } + @Override public int hashCode() { // TODO SF we need to provide hash code implementation so that there are no unexpected, diff --git a/src/main/java/org/mockito/internal/progress/MockingProgress.java b/src/main/java/org/mockito/internal/progress/MockingProgress.java index 9200c0845f..abdf68d83e 100644 --- a/src/main/java/org/mockito/internal/progress/MockingProgress.java +++ b/src/main/java/org/mockito/internal/progress/MockingProgress.java @@ -43,6 +43,8 @@ public interface MockingProgress { void mockingStarted(Object mock, MockCreationSettings settings); + void mockingStarted(Class mock, MockCreationSettings settings); + void addListener(MockitoListener listener); void removeListener(MockitoListener listener); diff --git a/src/main/java/org/mockito/internal/progress/MockingProgressImpl.java b/src/main/java/org/mockito/internal/progress/MockingProgressImpl.java index 58c126f842..07d411f046 100644 --- a/src/main/java/org/mockito/internal/progress/MockingProgressImpl.java +++ b/src/main/java/org/mockito/internal/progress/MockingProgressImpl.java @@ -159,6 +159,15 @@ public void mockingStarted(Object mock, MockCreationSettings settings) { validateMostStuff(); } + public void mockingStarted(Class mock, MockCreationSettings settings) { + for (MockitoListener listener : listeners) { + if (listener instanceof MockCreationListener) { + ((MockCreationListener) listener).onStaticMockCreated(mock, settings); + } + } + validateMostStuff(); + } + public void addListener(MockitoListener listener) { addListener(listener, listeners); } diff --git a/src/main/java/org/mockito/listeners/MockCreationListener.java b/src/main/java/org/mockito/listeners/MockCreationListener.java index 24a1904aa7..7ab15f8236 100644 --- a/src/main/java/org/mockito/listeners/MockCreationListener.java +++ b/src/main/java/org/mockito/listeners/MockCreationListener.java @@ -19,4 +19,12 @@ public interface MockCreationListener extends MockitoListener { * @param settings the settings used for creation */ void onMockCreated(Object mock, MockCreationSettings settings); + + /** + * Static mock object was just created. + * + * @param mock the type being mocked + * @param settings the settings used for creation + */ + default void onStaticMockCreated(Class mock, MockCreationSettings settings) {} } diff --git a/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java b/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java index 230e6773c0..2dde8d4a9b 100644 --- a/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java +++ b/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java @@ -11,21 +11,15 @@ import java.util.concurrent.atomic.AtomicReference; -import org.junit.Rule; import org.junit.Test; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.exceptions.base.MockitoException; import org.mockito.exceptions.verification.NoInteractionsWanted; import org.mockito.exceptions.verification.WantedButNotInvoked; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; public final class StaticMockTest { - @Rule // Adding rule to assert properly managed life-cycle for static mocks - public MockitoRule mockitoRule = MockitoJUnit.rule(); - @Test public void testStaticMockSimple() { assertEquals("foo", Dummy.foo()); diff --git a/subprojects/inline/src/test/java/org/mockitoinline/StaticRuleTest.java b/subprojects/inline/src/test/java/org/mockitoinline/StaticRuleTest.java new file mode 100644 index 0000000000..68b9c6a616 --- /dev/null +++ b/subprojects/inline/src/test/java/org/mockitoinline/StaticRuleTest.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockitoinline; + +import org.junit.Rule; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +import java.util.UUID; + +import static junit.framework.TestCase.assertEquals; + +public final class StaticRuleTest { + + @Rule + public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Mock + private MockedStatic mock; + + @Test + public void runs() { + mock.when(UUID::randomUUID).thenReturn(new UUID(123, 456)); + assertEquals(UUID.randomUUID(), new UUID(123, 456)); + } +} diff --git a/subprojects/inline/src/test/java/org/mockitoinline/StaticRunnerTest.java b/subprojects/inline/src/test/java/org/mockitoinline/StaticRunnerTest.java new file mode 100644 index 0000000000..e0159597f7 --- /dev/null +++ b/subprojects/inline/src/test/java/org/mockitoinline/StaticRunnerTest.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2018 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockitoinline; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.UUID; + +import static junit.framework.TestCase.assertEquals; + +@RunWith(MockitoJUnitRunner.class) +public final class StaticRunnerTest { + + @Mock + private MockedStatic mock; + + @Test + public void runs() { + mock.when(UUID::randomUUID).thenReturn(new UUID(123, 456)); + assertEquals(UUID.randomUUID(), new UUID(123, 456)); + } +}