InitialContext
利用使用 SPI 来处理其创建的事实。您可以通过系统属性( )创建一个实现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;
}
}
UseInitialContext
在junit测试中创建一个实例
-Djava.naming.initial.factory=initial.context.test.MyInitialContext
在命令行输出上This is my object!!
(易于在 eclipse 中设置)。我喜欢Mockito的嘲笑和存根。如果您处理大量遗留代码,我还推荐 Micheal Feather 的《有效处理遗留代码》。这完全是关于如何在程序中找到接缝,以便隔离特定的部分进行测试。