1
2
3
4
5
6 package otherTests;
7
8 import static org.junit.jupiter.api.Assertions.assertFalse;
9
10 import mockit.Capturing;
11 import mockit.Expectations;
12 import mockit.Mocked;
13 import mockit.integration.junit5.JMockitExtension;
14
15 import org.junit.jupiter.api.BeforeEach;
16 import org.junit.jupiter.api.MethodOrderer.MethodName;
17 import org.junit.jupiter.api.Test;
18 import org.junit.jupiter.api.TestMethodOrder;
19 import org.junit.jupiter.api.extension.ExtendWith;
20
21
22
23
24 @ExtendWith(JMockitExtension.class)
25 @TestMethodOrder(MethodName.class)
26 class SubclassTest {
27
28
29 private static boolean superClassConstructorCalled;
30
31
32 private static boolean subClassConstructorCalled;
33
34
35
36
37 public static class SuperClass {
38
39
40 final String name;
41
42
43
44
45
46
47
48
49
50 public SuperClass(int x, String name) {
51 this.name = name + x;
52 superClassConstructorCalled = true;
53 }
54 }
55
56
57
58
59 public static class SubClass extends SuperClass {
60
61
62
63
64
65
66
67 public SubClass(String name) {
68 super(name.length(), name);
69 subClassConstructorCalled = true;
70 }
71 }
72
73
74
75
76 @BeforeEach
77 void setUp() {
78 superClassConstructorCalled = false;
79 subClassConstructorCalled = false;
80 }
81
82
83
84
85
86
87
88 @Test
89 void captureSubclassThroughClassfileTransformer(@Capturing SuperClass captured) {
90 new SubClass("capture");
91
92 assertFalse(superClassConstructorCalled);
93 assertFalse(subClassConstructorCalled);
94 }
95
96
97
98
99
100
101
102 @Test
103 void captureSubclassThroughRedefinitionOfPreviouslyLoadedClasses(@Capturing SuperClass captured) {
104 new SubClass("capture");
105
106 assertFalse(superClassConstructorCalled);
107 assertFalse(subClassConstructorCalled);
108 }
109
110
111
112
113
114
115
116 @Test
117 void mockSubclassUsingExpectationsWithFirstSuperConstructor(@Mocked SubClass mock) {
118 new Expectations() {
119 {
120 new SubClass("test");
121 }
122 };
123
124 new SubClass("test");
125
126 assertFalse(superClassConstructorCalled);
127 assertFalse(subClassConstructorCalled);
128 }
129 }