Skip to content

Commit

Permalink
Fixes #2497: Throw exception on invalid matchers for mockStatic (#2506
Browse files Browse the repository at this point in the history
)
  • Loading branch information
temp-droid committed Dec 14, 2021
1 parent 582d890 commit 44ba00f
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 5 deletions.
2 changes: 2 additions & 0 deletions src/main/java/org/mockito/internal/MockedStaticImpl.java
Expand Up @@ -47,6 +47,8 @@ public <S> OngoingStubbing<S> when(Verification verification) {

try {
verification.apply();
} catch (MockitoException exception) {
throw exception;
} catch (Throwable ignored) {
}

Expand Down
1 change: 1 addition & 0 deletions subprojects/inline/inline.gradle
Expand Up @@ -5,6 +5,7 @@ apply from: "$rootDir/gradle/java-library.gradle"
dependencies {
api project.rootProject
testImplementation libraries.junit4
testImplementation libraries.assertj
}

tasks.javadoc.enabled = false
Expand Down
Expand Up @@ -7,10 +7,13 @@
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNull;
import static junit.framework.TestCase.fail;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;

import java.util.concurrent.atomic.AtomicReference;

import org.assertj.core.api.ThrowableAssert;
import org.junit.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
Expand Down Expand Up @@ -46,15 +49,15 @@ public void testStaticMockWithVerificationFailed() {
}

@Test
public void testStaticMockWithMoInteractions() {
public void testStaticMockWithNoInteractions() {
try (MockedStatic<Dummy> dummy = Mockito.mockStatic(Dummy.class)) {
dummy.when(Dummy::foo).thenReturn("bar");
dummy.verifyNoInteractions();
}
}

@Test(expected = NoInteractionsWanted.class)
public void testStaticMockWithMoInteractionsFailed() {
public void testStaticMockWithNoInteractionsFailed() {
try (MockedStatic<Dummy> dummy = Mockito.mockStatic(Dummy.class)) {
dummy.when(Dummy::foo).thenReturn("bar");
assertEquals("bar", Dummy.foo());
Expand All @@ -63,7 +66,7 @@ public void testStaticMockWithMoInteractionsFailed() {
}

@Test
public void testStaticMockWithMoMoreInteractions() {
public void testStaticMockWithNoMoreInteractions() {
try (MockedStatic<Dummy> dummy = Mockito.mockStatic(Dummy.class)) {
dummy.when(Dummy::foo).thenReturn("bar");
assertEquals("bar", Dummy.foo());
Expand All @@ -73,7 +76,7 @@ public void testStaticMockWithMoMoreInteractions() {
}

@Test(expected = NoInteractionsWanted.class)
public void testStaticMockWithMoMoreInteractionsFailed() {
public void testStaticMockWithNoMoreInteractionsFailed() {
try (MockedStatic<Dummy> dummy = Mockito.mockStatic(Dummy.class)) {
dummy.when(Dummy::foo).thenReturn("bar");
assertEquals("bar", Dummy.foo());
Expand Down Expand Up @@ -171,12 +174,27 @@ public void testStaticMockVoid() {
try (MockedStatic<Dummy> dummy = Mockito.mockStatic(Dummy.class)) {
Dummy.fooVoid("bar");
assertNull(Dummy.var1);
dummy.verify(()->Dummy.fooVoid("bar"));
dummy.verify(() -> Dummy.fooVoid("bar"));
}
Dummy.fooVoid("bar");
assertEquals("bar", Dummy.var1);
}

@Test
public void testStaticMockMustUseValidMatchers() {
try (MockedStatic<Dummy> mockedClass = Mockito.mockStatic(Dummy.class)) {
assertThatThrownBy(
new ThrowableAssert.ThrowingCallable() {
public void call() {
mockedClass.when(() -> Dummy.fooVoid("foo", any())).thenReturn(null);
}
})
.hasMessageContaining("Invalid use of argument matchers!");

Dummy.fooVoid("foo", "bar");
}
}

static class Dummy {

static String var1 = null;
Expand All @@ -188,5 +206,9 @@ static String foo() {
static void fooVoid(String var2) {
var1 = var2;
}

static void fooVoid(String var2, String var3) {
var1 = var2;
}
}
}

0 comments on commit 44ba00f

Please sign in to comment.