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 of 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が好きです。また、多くのレガシーコードを扱う場合は、MichealFeatherのレガシーコードを効果的に使用することをお勧めします。テストのために特定の部分を分離するために、プログラムで継ぎ目を見つける方法がすべてです。