利用使用SPI来处理其创建的事实。您可以通过创建 的实现并通过 system 属性 () 将其传递给测试来挂钩到其生命周期。这比听起来更简单。InitialContext
javax.naming.spi.InitialContextFactory
javax.naming.factory.initial
Context.INTITIAL_CONTEXT_FACTORY
给定此类:
public class UseInitialContext {
public UseInitialContext() {
try {
InitialContext ic = new InitialContext();
Object myObject = ic.lookup("myObject");
System.out.println(myObject);
} catch (NamingException e) {
e.printStackTrace();
}
}
}
这个 impl 的:InitialContextFactory
public class MyInitialContextFactory implements InitialContextFactory {
public Context getInitialContext(Hashtable<?, ?> arg0)
throws NamingException {
Context context = Mockito.mock(Context.class);
Mockito.when(context.lookup("myObject")).thenReturn("This is my object!!");
return context;
}
}
在 junit 测试中创建 的实例UseInitialContext
-Djava.naming.initial.factory=initial.context.test.MyInitialContext
在命令行输出上(在 eclipse 中易于设置)。我喜欢Mockito的嘲笑和茬茬。如果你处理大量的遗留代码,我也会推荐Micheal Feather的《有效使用遗留代码》。这一切都关于如何在程序中查找接缝,以便隔离特定部分进行测试。This is my object!!