这篇实践,是为了验证一个问题
1.mock能不能 不执行父类方法?
2.构造器经过mock后,父类构造器会不会执行?
BaseClass.class
public class BaseClass {
public BaseClass(String s) {
System.out.println("this base class call:" + s);
}
public void baseFunc() {
System.out.println("this baseclass do baseFunc");
}
}
ParentClass.class
public class ParentClass extends BaseClass{
public ParentClass(String s) {
super(s);
System.out.println("this ParentClass class call:" + s);
}
@Override
public void baseFunc() {
super.baseFunc();
System.out.println("this parentclass do call");
}
}
ChildClass.class
public class ChildClass extends ParentClass {
public ChildClass(String s) {
super(s);
System.out.println("this ChildClass class call:" + s);
}
@Override
public void baseFunc() {
super.baseFunc();
System.out.println("this childclass do call");
}
}
ChildClassJMockitTest.class
public class ChildClassJMockitTest {
static final class ChildClassMockUp extends MockUp<ChildClass> {
@Mock
public void $init(String s) {
}
@Mock
public void $clinit(){
}
}
private ChildClassMockUp childClassMockUp = new ChildClassMockUp();//这一行有妙用
@Test
public void testFunc() {
ChildClass child = new ChildClass("lahm");
child.baseFunc();
}
}
运行结果
屏蔽标记行的运行结果是
image.png
不屏蔽标记行的运行结果
image.png
区别就是,当前类childClass的构造器方法不被执行了。
但是父类构造器,跟父类方法实现 依旧执行。
原理:super的字节码并未被改变
网友评论