Skip to content

Commit 724619b

Browse files
committed
Does not include static mocks in regular listener logic as it might distort existing mock collectors that do not expect scoped mocks. Fixes #1988.
1 parent 0c56b3a commit 724619b

File tree

7 files changed

+102
-6
lines changed

7 files changed

+102
-6
lines changed

src/main/java/org/mockito/internal/invocation/InterceptedInvocation.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,30 @@ public Object callRealMethod() throws Throwable {
141141
return realMethod.invoke();
142142
}
143143

144+
/**
145+
* @deprecated Not used by Mockito but by mockito-scala
146+
*/
147+
@Deprecated
148+
public MockReference<Object> getMockRef() {
149+
return mockRef;
150+
}
151+
152+
/**
153+
* @deprecated Not used by Mockito but by mockito-scala
154+
*/
155+
@Deprecated
156+
public MockitoMethod getMockitoMethod() {
157+
return mockitoMethod;
158+
}
159+
160+
/**
161+
* @deprecated Not used by Mockito but by mockito-scala
162+
*/
163+
@Deprecated
164+
public RealMethod getRealMethod() {
165+
return realMethod;
166+
}
167+
144168
@Override
145169
public int hashCode() {
146170
// TODO SF we need to provide hash code implementation so that there are no unexpected,

src/main/java/org/mockito/internal/progress/MockingProgress.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public interface MockingProgress {
4343

4444
void mockingStarted(Object mock, MockCreationSettings settings);
4545

46+
void mockingStarted(Class<?> mock, MockCreationSettings settings);
47+
4648
void addListener(MockitoListener listener);
4749

4850
void removeListener(MockitoListener listener);

src/main/java/org/mockito/internal/progress/MockingProgressImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,15 @@ public void mockingStarted(Object mock, MockCreationSettings settings) {
159159
validateMostStuff();
160160
}
161161

162+
public void mockingStarted(Class<?> mock, MockCreationSettings settings) {
163+
for (MockitoListener listener : listeners) {
164+
if (listener instanceof MockCreationListener) {
165+
((MockCreationListener) listener).onStaticMockCreated(mock, settings);
166+
}
167+
}
168+
validateMostStuff();
169+
}
170+
162171
public void addListener(MockitoListener listener) {
163172
addListener(listener, listeners);
164173
}

src/main/java/org/mockito/listeners/MockCreationListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,12 @@ public interface MockCreationListener extends MockitoListener {
1919
* @param settings the settings used for creation
2020
*/
2121
void onMockCreated(Object mock, MockCreationSettings settings);
22+
23+
/**
24+
* Static mock object was just created.
25+
*
26+
* @param mock the type being mocked
27+
* @param settings the settings used for creation
28+
*/
29+
default void onStaticMockCreated(Class<?> mock, MockCreationSettings settings) {}
2230
}

subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,15 @@
1111

1212
import java.util.concurrent.atomic.AtomicReference;
1313

14-
import org.junit.Rule;
1514
import org.junit.Test;
1615
import org.mockito.MockedStatic;
1716
import org.mockito.Mockito;
1817
import org.mockito.exceptions.base.MockitoException;
1918
import org.mockito.exceptions.verification.NoInteractionsWanted;
2019
import org.mockito.exceptions.verification.WantedButNotInvoked;
21-
import org.mockito.junit.MockitoJUnit;
22-
import org.mockito.junit.MockitoRule;
2320

2421
public final class StaticMockTest {
2522

26-
@Rule // Adding rule to assert properly managed life-cycle for static mocks
27-
public MockitoRule mockitoRule = MockitoJUnit.rule();
28-
2923
@Test
3024
public void testStaticMockSimple() {
3125
assertEquals("foo", Dummy.foo());
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright (c) 2018 Mockito contributors
3+
* This program is made available under the terms of the MIT License.
4+
*/
5+
package org.mockitoinline;
6+
7+
import org.junit.Rule;
8+
import org.junit.Test;
9+
import org.mockito.Mock;
10+
import org.mockito.MockedStatic;
11+
import org.mockito.junit.MockitoJUnit;
12+
import org.mockito.junit.MockitoRule;
13+
14+
import java.util.UUID;
15+
16+
import static junit.framework.TestCase.assertEquals;
17+
18+
public final class StaticRuleTest {
19+
20+
@Rule
21+
public MockitoRule mockitoRule = MockitoJUnit.rule();
22+
23+
@Mock
24+
private MockedStatic<UUID> mock;
25+
26+
@Test
27+
public void runs() {
28+
mock.when(UUID::randomUUID).thenReturn(new UUID(123, 456));
29+
assertEquals(UUID.randomUUID(), new UUID(123, 456));
30+
}
31+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright (c) 2018 Mockito contributors
3+
* This program is made available under the terms of the MIT License.
4+
*/
5+
package org.mockitoinline;
6+
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.mockito.Mock;
10+
import org.mockito.MockedStatic;
11+
import org.mockito.junit.MockitoJUnitRunner;
12+
13+
import java.util.UUID;
14+
15+
import static junit.framework.TestCase.assertEquals;
16+
17+
@RunWith(MockitoJUnitRunner.class)
18+
public final class StaticRunnerTest {
19+
20+
@Mock
21+
private MockedStatic<UUID> mock;
22+
23+
@Test
24+
public void runs() {
25+
mock.when(UUID::randomUUID).thenReturn(new UUID(123, 456));
26+
assertEquals(UUID.randomUUID(), new UUID(123, 456));
27+
}
28+
}

0 commit comments

Comments
 (0)