仕様に応じて JMS プロバイダーを開発していますが、特定のオブジェクトがReferenceableを実装する必要があります。JMS ConnectionFactory に getReference() を実装し、参照をオブジェクトに変換するオブジェクト ファクトリを作成しました。単体テストの効果的な方法を見つけようとしています。
Spring の SimpleNamingContext は、法案に適合しません。
Context ctx = new SimpleNamingContext();
ctx.bind("testFactory", connFactory);
ConnectionFactory testConnFactory = (ConnectionFactory)ctx.lookup("testFactory");
Assert.assertEquals(connFactor, testConnFactory);
SimpleNamingContext はモック オブジェクトであるため、誤検知が発生します。オブジェクトは同一で、getReference もオブジェクト ファクトリも呼び出されません。
テストのためにJettyサーバーを配線する可能性を調べましたが、これは私がここで必要とする以上のものかもしれません.
理想的には、上記の例のように直接配線できる単純な Context クラスを探しています。これは、実際に JNDI 固有のメソッドを舞台裏で実行します。その手短に、これを単体テストする方法について他の推奨事項を取り上げます。
実装方法を定義するために、Java Referenceable Objects and Referencesチュートリアルを使用しています。
前もって感謝します。
更新:これが関連しているかどうかはわかりませんが、ここにobject factoryがあり、ここに私がテストしようとしているReferenceable.getReference()実装があります。
結論: 以下の Nicholas のアドバイスに従って、RefFSContextFactory を使用しました。JUnit テストでコンテキストを生成するために使用したコードは次のとおりです。
@Rule public TemporaryFolder folder = new TemporaryFolder();
private Context getContext() throws MalformedURLException, NamingException {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
env.put(Context.PROVIDER_URL, folder.getRoot().toURI().toURL().toString());
Context ctx = new InitialContext(env);
Assert.assertNotNull(ctx);
return ctx;
}
現在動作中のテスト クラスの完全なソース コードはこちらです。