diff --git a/src/main/java/org/mockito/internal/MockedStaticImpl.java b/src/main/java/org/mockito/internal/MockedStaticImpl.java index fb6c16010a..fbfb54b004 100644 --- a/src/main/java/org/mockito/internal/MockedStaticImpl.java +++ b/src/main/java/org/mockito/internal/MockedStaticImpl.java @@ -47,6 +47,8 @@ public OngoingStubbing when(Verification verification) { try { verification.apply(); + } catch (MockitoException exception) { + throw exception; } catch (Throwable ignored) { } diff --git a/subprojects/inline/inline.gradle b/subprojects/inline/inline.gradle index d1f9214580..f96cffce9f 100644 --- a/subprojects/inline/inline.gradle +++ b/subprojects/inline/inline.gradle @@ -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 diff --git a/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java b/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java index b0eebdaf47..c0fb1cbc29 100644 --- a/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java +++ b/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java @@ -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; @@ -46,7 +49,7 @@ public void testStaticMockWithVerificationFailed() { } @Test - public void testStaticMockWithMoInteractions() { + public void testStaticMockWithNoInteractions() { try (MockedStatic dummy = Mockito.mockStatic(Dummy.class)) { dummy.when(Dummy::foo).thenReturn("bar"); dummy.verifyNoInteractions(); @@ -54,7 +57,7 @@ public void testStaticMockWithMoInteractions() { } @Test(expected = NoInteractionsWanted.class) - public void testStaticMockWithMoInteractionsFailed() { + public void testStaticMockWithNoInteractionsFailed() { try (MockedStatic dummy = Mockito.mockStatic(Dummy.class)) { dummy.when(Dummy::foo).thenReturn("bar"); assertEquals("bar", Dummy.foo()); @@ -63,7 +66,7 @@ public void testStaticMockWithMoInteractionsFailed() { } @Test - public void testStaticMockWithMoMoreInteractions() { + public void testStaticMockWithNoMoreInteractions() { try (MockedStatic dummy = Mockito.mockStatic(Dummy.class)) { dummy.when(Dummy::foo).thenReturn("bar"); assertEquals("bar", Dummy.foo()); @@ -73,7 +76,7 @@ public void testStaticMockWithMoMoreInteractions() { } @Test(expected = NoInteractionsWanted.class) - public void testStaticMockWithMoMoreInteractionsFailed() { + public void testStaticMockWithNoMoreInteractionsFailed() { try (MockedStatic dummy = Mockito.mockStatic(Dummy.class)) { dummy.when(Dummy::foo).thenReturn("bar"); assertEquals("bar", Dummy.foo()); @@ -171,12 +174,27 @@ public void testStaticMockVoid() { try (MockedStatic 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 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; @@ -188,5 +206,9 @@ static String foo() { static void fooVoid(String var2) { var1 = var2; } + + static void fooVoid(String var2, String var3) { + var1 = var2; + } } }