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.*