1
2
3
4
5 package mockit;
6
7 import static org.junit.jupiter.api.Assertions.assertEquals;
8 import static org.junit.jupiter.api.Assertions.assertFalse;
9 import static org.junit.jupiter.api.Assertions.assertNotNull;
10 import static org.junit.jupiter.api.Assertions.assertNull;
11 import static org.junit.jupiter.api.Assertions.assertSame;
12 import static org.junit.jupiter.api.Assertions.assertTrue;
13
14 import org.junit.Rule;
15 import org.junit.Test;
16 import org.junit.rules.ExpectedException;
17
18 public final class MockInvocationTest {
19 @Rule
20 public final ExpectedException thrown = ExpectedException.none();
21
22 public static class Collaborator {
23 int value;
24
25 Collaborator() {
26 }
27
28 public Collaborator(int i) {
29 value = i;
30 }
31
32 public int getValue() {
33 return -1;
34 }
35
36 public void setValue(int i) {
37 value = i;
38 }
39
40 public String doSomething(boolean b, int[] i, String s) {
41 return s + b + i[0];
42 }
43
44 public static boolean staticMethod() {
45 return true;
46 }
47 }
48
49 static final class MockMethods extends MockUp<Collaborator> {
50 @Mock
51 static boolean staticMethod(Invocation context) {
52 assertNotNull(context);
53 assertNull(context.getInvokedInstance());
54 assertEquals(1, context.getInvocationCount());
55 return false;
56 }
57
58 @Mock
59 int getValue(Invocation context) {
60 assertTrue(context.getInvokedInstance() instanceof Collaborator);
61 assertEquals(0, context.getInvocationIndex());
62 return 123;
63 }
64 }
65
66 @Test
67 public void mockMethodsForMethodsWithoutParameters() {
68 new MockMethods();
69 assertFalse(Collaborator.staticMethod());
70 assertEquals(123, new Collaborator().getValue());
71 }
72
73 @Test
74 public void instanceMockMethodForStaticMethod() {
75 new MockUp<Collaborator>() {
76 @Mock
77 boolean staticMethod(Invocation context) {
78 assertNull(context.getInvokedInstance());
79 assertEquals(context.getInvocationCount() - 1, context.getInvocationIndex());
80 return context.getInvocationCount() <= 0;
81 }
82 };
83
84 assertFalse(Collaborator.staticMethod());
85 assertFalse(Collaborator.staticMethod());
86 }
87
88 @Test
89 public void mockMethodsWithInvocationParameter() {
90 new MockUp<Collaborator>() {
91 Collaborator instantiated;
92
93 @Mock
94 void $init(Invocation inv, int i) {
95 assertNotNull(inv.getInvokedInstance());
96 assertTrue(i > 0);
97 instantiated = inv.getInvokedInstance();
98 }
99
100 @Mock
101 String doSomething(Invocation inv, boolean b, int[] array, String s) {
102 assertNotNull(inv);
103 assertSame(instantiated, inv.getInvokedInstance());
104 assertEquals(1, inv.getInvocationCount());
105 assertTrue(b);
106 assertNull(array);
107 assertEquals("test", s);
108 return "mock";
109 }
110 };
111
112 String s = new Collaborator(123).doSomething(true, null, "test");
113 assertEquals("mock", s);
114 }
115
116 static class MockMethodsWithParameters extends MockUp<Collaborator> {
117 int capturedArgument;
118 Collaborator mockedInstance;
119
120 @Mock
121 void $init(Invocation context, int i) {
122 capturedArgument = i + context.getInvocationCount();
123 assertNull(mockedInstance);
124 assertTrue(context.getInvokedInstance() instanceof Collaborator);
125 assertEquals(1, context.getInvokedArguments().length);
126 }
127
128 @Mock
129 void setValue(Invocation context, int i) {
130 assertEquals(i, context.getInvocationIndex());
131 assertSame(mockedInstance, context.getInvokedInstance());
132 assertEquals(1, context.getInvokedArguments().length);
133 }
134 }
135
136 @Test
137 public void mockMethodsWithParameters() {
138 MockMethodsWithParameters mock = new MockMethodsWithParameters();
139
140 Collaborator col = new Collaborator(4);
141 mock.mockedInstance = col;
142
143 assertEquals(5, mock.capturedArgument);
144 col.setValue(0);
145 col.setValue(1);
146 }
147
148 @Test
149 public void useOfContextParametersForJREMethods() throws Exception {
150 new MockUp<Runtime>() {
151 @Mock
152 void runFinalizersOnExit(Invocation inv, boolean b) {
153 assertNull(inv.getInvokedInstance());
154 assertEquals(1, inv.getInvocationCount());
155 assertTrue(b);
156 }
157
158 @Mock
159 Process exec(Invocation inv, String command, String[] envp) {
160 assertSame(Runtime.getRuntime(), inv.getInvokedInstance());
161 assertEquals(0, inv.getInvocationIndex());
162 assertNotNull(command);
163 assertNull(envp);
164 return null;
165 }
166 };
167
168
169 assertNull(Runtime.getRuntime().exec("test", null));
170 }
171 }