Skip to content

Commit 2576950

Browse files
authored
Merge pull request #2405 from mockito/fix-proxy-mock-maker
Fix implementation of proxy mock maker for toString and add additional unit tests.
2 parents 03ae33a + cb5e3a6 commit 2576950

File tree

3 files changed

+52
-2
lines changed

3 files changed

+52
-2
lines changed

src/main/java/org/mockito/internal/creation/proxy/ProxyMockMaker.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
107107
case "equals":
108108
return proxy == args[0];
109109
case "toString":
110-
return "";
110+
break;
111111
default:
112112
throw new MockitoException(
113113
join(

src/test/java/org/mockito/internal/creation/proxy/ProxyMockMakerTest.java

+50
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.mockito.internal.creation.AbstractMockMakerTest;
99

1010
import java.io.Serializable;
11+
import java.lang.reflect.InvocationHandler;
1112
import java.lang.reflect.Proxy;
1213

1314
import static org.assertj.core.api.Assertions.assertThat;
@@ -47,5 +48,54 @@ public void should_discover_mockable_input() {
4748
assertThat(mockMaker.isTypeMockable(SomeInterface.class).mockable()).isTrue();
4849
}
4950

51+
@Test
52+
public void can_compute_hash_code() throws Throwable {
53+
SomeInterface proxy =
54+
mockMaker.createMock(settingsFor(SomeInterface.class), dummyHandler());
55+
56+
InvocationHandler handler = Proxy.getInvocationHandler(proxy);
57+
58+
assertThat(handler.invoke(proxy, Object.class.getMethod("hashCode"), new Object[0]))
59+
.isEqualTo(System.identityHashCode(proxy));
60+
}
61+
62+
@Test
63+
public void can_compute_equality() throws Throwable {
64+
SomeInterface proxy =
65+
mockMaker.createMock(settingsFor(SomeInterface.class), dummyHandler());
66+
67+
InvocationHandler handler = Proxy.getInvocationHandler(proxy);
68+
69+
assertThat(
70+
handler.invoke(
71+
proxy,
72+
Object.class.getMethod("equals", Object.class),
73+
new Object[] {proxy}))
74+
.isEqualTo(true);
75+
assertThat(
76+
handler.invoke(
77+
proxy,
78+
Object.class.getMethod("equals", Object.class),
79+
new Object[] {null}))
80+
.isEqualTo(false);
81+
assertThat(
82+
handler.invoke(
83+
proxy,
84+
Object.class.getMethod("equals", Object.class),
85+
new Object[] {new Object()}))
86+
.isEqualTo(false);
87+
}
88+
89+
@Test
90+
public void can_invoke_toString() throws Throwable {
91+
SomeInterface proxy =
92+
mockMaker.createMock(settingsFor(SomeInterface.class), dummyHandler());
93+
94+
InvocationHandler handler = Proxy.getInvocationHandler(proxy);
95+
96+
assertThat(handler.invoke(proxy, Object.class.getMethod("toString"), new Object[0]))
97+
.isNull();
98+
}
99+
50100
interface SomeInterface {}
51101
}

subprojects/kotlinTest/src/test/kotlin/org/mockito/kotlin/SuspendTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
package org.mockito.kotlin
66

77
import kotlinx.coroutines.runBlocking
8+
import org.hamcrest.MatcherAssert.assertThat
89
import org.hamcrest.core.IsEqual
9-
import org.junit.Assert.assertThat
1010
import org.junit.Test
1111
import org.mockito.Mockito.*
1212

0 commit comments

Comments
 (0)