建立公共部分静态类打桩1

静态方法打桩,统一使用Mockit.redefineMethods方法实现

另外,打桩的实现要和原实现类一一对应,所有人共用这些资源,防止滥用

比如,需要对com.icnfg.comapi.Tracer类的实现进行打桩

就需要创建桩类:
com.icnfg.comapi.MyTracer

在使用到Tracer之前,使用
Mockit.redefineMethods Tracer, MyTracer
进行打桩即可

另外,对于公共的操作,可以提取,不能每个测试方法中都放,这个测试代码会很多,比如Tracer初始化,涉及到很多静态方法,可以封装

class TestUtils
{
    public static tracerStub(){
        // 为了让Tracer的静态块能够使用,需要打下面的桩
        MyIOUtils.prop.setProperty "log4j.category.com", "DEBUG,"
        Mockit.redefineMethods(IOUtils, MyIOUtils)
        Mockit.redefineMethods(PropertyConfigurator, MyPropertyConfigurator)
        Mockit.redefineMethods(Configuration, MyConfiguration)
        Mockit.redefineMethods(Tracer, MyTracer)
}
}

这样,在每一个测试类中的@Before方法中,直接调用TestUtils.tracerStub()方法,即可完成打桩,不需要自己再写

另外,静态方法和静态初始块,是非常不好的设计,我们在功能开发时,能够重构的地方,尽量重构,不过要保证对外开放的接口要兼容

你可能感兴趣的:(log4j)