JMockit:使用 MockUp mock 构造函数和静态代码块


#Java Jmockit#


测试示例

被测试类

package demo;

public class Calculator {

    public Calculator() {
        System.out.println("无参构造函数初始化");
    }

    static {
        System.out.println("静态代码块初始化");
    }

}

示例1:

package demo;

import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;

public class CalculatorTest {

    @Test
    public void test_add_01() {
        System.out.println("--- mock 之前 ---");
        new Calculator();

        // mock
        new MockUp<Calculator>() {
            @Mock
            public void $init() {
                System.out.println("无参构造函数被 mock 了");
            }
            @Mock
            public void $clinit() {
                System.out.println("静态代码块被 mock 了");
            }
        };

        System.out.println("--- mock 之后 ---");
        new Calculator();
    }

}

执行结果:

--- mock 之前 ---
静态代码块初始化
无参构造函数初始化
--- mock 之后 ---
无参构造函数被 mock 了

为什么 mock 之后,没有输出 静态代码块被 mock 了?因为类的静态代码块只会执行一次。

将 mock 之前的新建对象注释掉:

package demo;

import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;

public class CalculatorTest {

    @Test
    public void test_add_01() {
        // System.out.println("--- mock 之前 ---");
        // new Calculator();

        // mock
        new MockUp<Calculator>() {
            @Mock
            public void $init() {
                System.out.println("无参构造函数被 mock 了");
            }
            @Mock
            public void $clinit() {
                System.out.println("静态代码块被 mock 了");
            }
        };

        System.out.println("--- mock 之后 ---");
        new Calculator();
    }

}

执行结果:

--- mock 之后 ---
静态代码块被 mock 了
无参构造函数被 mock 了

( 本文完 )