建立公共部分静态类打桩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()方法,即可完成打桩,不需要自己再写
另外,静态方法和静态初始块,是非常不好的设计,我们在功能开发时,能够重构的地方,尽量重构,不过要保证对外开放的接口要兼容