美文网首页
JMockit对super方法的mock实践

JMockit对super方法的mock实践

作者: 普通的程序员 | 来源:发表于2020-08-30 12:17 被阅读0次

    这篇实践,是为了验证一个问题
    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的字节码并未被改变

    相关文章

      网友评论

          本文标题:JMockit对super方法的mock实践

          本文链接:https://www.haomeiwen.com/subject/tqtesktx.html