alibaba/testable-mock

静态代码块

ChenJunGui opened this issue · 1 comments

比如:连接一个redis,采用是静态代码块的方式。测试的时候是否能屏蔽了?不然每次测试该类都要加载连接

支持直接Mock静态代码块内里的调用,具体一个实际的例子:

业务代码里使用静态代码块加载本地系统库,在运行单元测试的时候希望将它忽略。

public class JNIClass {

    static {
        System.loadLibrary("native-lib");
    }

    // 以下具引入的方法省略
    public native String xxxx(... ...);

}

在测试时候时候Mock掉这个loadLibrary()调用,改为打印一行文本(这里是用独立的Mock类,也可以写在Test类里的Mock内部类里面):

public class JNIClassMock {

    @MockInvoke(targetClass = System.class, targetMethod = "loadLibrary")
    private void load(String libname) {
        System.err.println("loadLibrary " + libname);
    }

}