1 package mockit;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4 import static org.junit.jupiter.api.Assertions.assertNotEquals;
5 import static org.junit.jupiter.api.Assertions.assertTrue;
6
7 import org.junit.jupiter.api.Test;
8
9
10
11
12 @SuppressWarnings({ "ObjectEqualsNull", "SimplifiableJUnitAssertion" })
13 final class ObjectOverridesAndInjectableMocksTest {
14
15
16 @Injectable
17 ClassWithObjectOverrides a;
18
19
20 @Injectable
21 ClassWithObjectOverrides b;
22
23
24
25
26 @Test
27 void verifyStandardBehaviorOfOverriddenEqualsMethodsInMockedClass() {
28 assertDefaultEqualsBehavior(a, b);
29 assertDefaultEqualsBehavior(b, a);
30 }
31
32
33
34
35
36
37
38
39
40 void assertDefaultEqualsBehavior(Object obj1, Object obj2) {
41 assertNotEquals(null, obj1);
42 assertNotEquals("test", obj1);
43
44 assertEquals(obj1, obj1);
45 assertNotEquals(obj1, obj2);
46 }
47
48
49
50
51 @Test
52 void allowAnyInvocationsOnOverriddenObjectMethodsForStrictMocks() {
53 new Expectations() {
54 {
55 a.getIntValue();
56 result = 58;
57 }
58 };
59
60 assertNotEquals(a, b);
61
62 assertEquals(a, a);
63 assertEquals(58, a.getIntValue());
64 assertNotEquals(b, a);
65 assertNotEquals(a, b);
66 }
67
68
69
70
71 static class BaseClass {
72
73
74 final int value;
75
76
77
78
79
80
81
82 BaseClass(int value) {
83 this.value = value;
84 }
85
86 @Override
87 public boolean equals(Object obj) {
88 return value == ((BaseClass) obj).value;
89 }
90 }
91
92
93
94
95 static class Subclass1 extends BaseClass {
96
97
98
99 Subclass1() {
100 super(1);
101 }
102 }
103
104
105
106
107 static class Subclass2 extends BaseClass {
108
109
110
111 Subclass2() {
112 super(2);
113 }
114 }
115
116
117
118
119
120
121
122 @Test
123 void executeEqualsOverrideOnInstancesOfDifferentSubclassThanTheOneMocked(@Injectable Subclass1 mocked) {
124 Object s1 = new Subclass2();
125 Object s2 = new Subclass2();
126
127 boolean cmp = s1.equals(s2);
128
129 assertTrue(cmp);
130 }
131 }