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