From cb5e3a607f1155d7e511965c834ab6053cc5634f Mon Sep 17 00:00:00 2001 From: Rafael Winterhalter Date: Tue, 24 Aug 2021 20:27:18 +0200 Subject: [PATCH] Fix implementation of proxy mock maker for toString and add additional unit tests. --- .../creation/proxy/ProxyMockMaker.java | 2 +- .../creation/proxy/ProxyMockMakerTest.java | 50 +++++++++++++++++++ .../kotlin/org/mockito/kotlin/SuspendTest.kt | 2 +- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/mockito/internal/creation/proxy/ProxyMockMaker.java b/src/main/java/org/mockito/internal/creation/proxy/ProxyMockMaker.java index 31a13124c4..449529b7a4 100644 --- a/src/main/java/org/mockito/internal/creation/proxy/ProxyMockMaker.java +++ b/src/main/java/org/mockito/internal/creation/proxy/ProxyMockMaker.java @@ -107,7 +107,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl case "equals": return proxy == args[0]; case "toString": - return ""; + break; default: throw new MockitoException( join( diff --git a/src/test/java/org/mockito/internal/creation/proxy/ProxyMockMakerTest.java b/src/test/java/org/mockito/internal/creation/proxy/ProxyMockMakerTest.java index 1a44924aa8..d15fe9cb7d 100644 --- a/src/test/java/org/mockito/internal/creation/proxy/ProxyMockMakerTest.java +++ b/src/test/java/org/mockito/internal/creation/proxy/ProxyMockMakerTest.java @@ -8,6 +8,7 @@ import org.mockito.internal.creation.AbstractMockMakerTest; import java.io.Serializable; +import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import static org.assertj.core.api.Assertions.assertThat; @@ -47,5 +48,54 @@ public void should_discover_mockable_input() { assertThat(mockMaker.isTypeMockable(SomeInterface.class).mockable()).isTrue(); } + @Test + public void can_compute_hash_code() throws Throwable { + SomeInterface proxy = + mockMaker.createMock(settingsFor(SomeInterface.class), dummyHandler()); + + InvocationHandler handler = Proxy.getInvocationHandler(proxy); + + assertThat(handler.invoke(proxy, Object.class.getMethod("hashCode"), new Object[0])) + .isEqualTo(System.identityHashCode(proxy)); + } + + @Test + public void can_compute_equality() throws Throwable { + SomeInterface proxy = + mockMaker.createMock(settingsFor(SomeInterface.class), dummyHandler()); + + InvocationHandler handler = Proxy.getInvocationHandler(proxy); + + assertThat( + handler.invoke( + proxy, + Object.class.getMethod("equals", Object.class), + new Object[] {proxy})) + .isEqualTo(true); + assertThat( + handler.invoke( + proxy, + Object.class.getMethod("equals", Object.class), + new Object[] {null})) + .isEqualTo(false); + assertThat( + handler.invoke( + proxy, + Object.class.getMethod("equals", Object.class), + new Object[] {new Object()})) + .isEqualTo(false); + } + + @Test + public void can_invoke_toString() throws Throwable { + SomeInterface proxy = + mockMaker.createMock(settingsFor(SomeInterface.class), dummyHandler()); + + InvocationHandler handler = Proxy.getInvocationHandler(proxy); + + assertThat(handler.invoke(proxy, Object.class.getMethod("toString"), new Object[0])) + .isNull(); + } + interface SomeInterface {} } diff --git a/subprojects/kotlinTest/src/test/kotlin/org/mockito/kotlin/SuspendTest.kt b/subprojects/kotlinTest/src/test/kotlin/org/mockito/kotlin/SuspendTest.kt index 85131ac6f8..d42a0c0006 100644 --- a/subprojects/kotlinTest/src/test/kotlin/org/mockito/kotlin/SuspendTest.kt +++ b/subprojects/kotlinTest/src/test/kotlin/org/mockito/kotlin/SuspendTest.kt @@ -5,8 +5,8 @@ package org.mockito.kotlin import kotlinx.coroutines.runBlocking +import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.core.IsEqual -import org.junit.Assert.assertThat import org.junit.Test import org.mockito.Mockito.*