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.assertTrue;
10
11 import edu.umd.cs.findbugs.annotations.NonNull;
12
13 import java.util.Date;
14
15 import mockit.integration.junit5.JMockitExtension;
16
17 import org.junit.jupiter.api.Test;
18 import org.junit.jupiter.api.extension.ExtendWith;
19
20
21
22
23 @ExtendWith(JMockitExtension.class)
24 class NaturalOrderingTest {
25
26
27
28
29
30
31
32
33
34 @Test
35 void verifyStandardComparableBehaviorInMockedClass(@Mocked Date a, @Mocked Date b) {
36
37 assertEquals(0, a.compareTo(a));
38
39 assertEquals(0, b.compareTo(b));
40
41 int aXb = a.compareTo(b);
42 assertTrue(aXb != 0);
43
44 int bXa = b.compareTo(a);
45 assertTrue(bXa != 0);
46
47 assertEquals(aXb, -bXa);
48 }
49
50
51
52
53 @SuppressWarnings("ComparableImplementedButEqualsNotOverridden")
54 static final class ComparableClass implements Comparable<String> {
55
56
57 final String value;
58
59
60
61
62
63
64
65 ComparableClass(String value) {
66 this.value = value;
67 }
68
69 @Override
70 public int compareTo(@NonNull String s) {
71 return value.compareTo(s);
72 }
73 }
74
75
76
77
78
79
80
81
82
83 @Test
84 void mockOverrideOfCompareToMethod(@Mocked final ComparableClass a, @Mocked final ComparableClass b) {
85 new Expectations() {
86 {
87 a.compareTo(null);
88 result = 5;
89 a.compareTo(anyString);
90 result = 123;
91 }
92 };
93
94 new Expectations() {
95 {
96 b.compareTo("test");
97 result = -50;
98 }
99 };
100
101 assertEquals(5, a.compareTo(null));
102 assertEquals(123, a.compareTo("test"));
103 assertEquals(-50, b.compareTo("test"));
104 }
105
106
107
108
109
110
111
112
113
114 @Test
115 void mockOverrideOfCompareToMethodInJREClass(@Mocked final Date a, @Mocked final Date b) {
116 new Expectations() {
117 {
118 a.compareTo(b);
119 result = 5;
120 }
121 };
122
123 assertEquals(5, a.compareTo(b));
124 assertTrue(b.compareTo(a) != 0);
125
126 new Verifications() {
127 {
128 a.compareTo((Date) any);
129 b.compareTo(a);
130 }
131 };
132 }
133 }