Skip to content

Commit

Permalink
Does not include static mocks in regular listener logic as it might d…
Browse files Browse the repository at this point in the history
…istort existing mock collectors that do not expect scoped mocks. Fixes #1988.
  • Loading branch information
raphw committed Jul 28, 2020
1 parent 0c56b3a commit db51229
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 6 deletions.
Expand Up @@ -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);
Expand Down
Expand Up @@ -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);
}
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/org/mockito/listeners/MockCreationListener.java
Expand Up @@ -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) {}
}
Expand Up @@ -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());
Expand Down
@@ -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<UUID> mock;

@Test
public void runs() {
mock.when(UUID::randomUUID).thenReturn(new UUID(123, 456));
assertEquals(UUID.randomUUID(), new UUID(123, 456));
}
}
@@ -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<UUID> mock;

@Test
public void runs() {
mock.when(UUID::randomUUID).thenReturn(new UUID(123, 456));
assertEquals(UUID.randomUUID(), new UUID(123, 456));
}
}

0 comments on commit db51229

Please sign in to comment.