仕様に合わせてJMSプロバイダを開発しており、特定のオブジェクトにReferenceableを実装する必要があります。 JMS ConnectionFactoryでgetReference()を実装しましたが、参照をオブジェクトに変換するためにobject factoryを作成しました。私は単体テストへの効果的な方法を見つけようとしています。javax.naming.Referenceableの実装をユニットテストするにはどうすればよいですか?
SpringのSimpleNamingContextは、法案に適合しない:
Context ctx = new SimpleNamingContext();
ctx.bind("testFactory", connFactory);
ConnectionFactory testConnFactory = (ConnectionFactory)ctx.lookup("testFactory");
Assert.assertEquals(connFactor, testConnFactory);
SimpleNamingContextはモックオブジェクトであるので、それは私に偽陽性を与えます。オブジェクトは同じで、もgetReferenceもオブジェクトのファクトリもと呼び出されません。
私はおそらく、テストするためにJettyサーバーを配線することを検討しましたが、これは私がここで必要とする以上のものかもしれません。
理想的には、単純なコンテキストクラスを探しています。上記の例のように、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;
}
完全なソースコードがhereです。
SimpleNamingContext()が機能しているか、単体テストのこの部分であるかどうかテストしていますか? – eabraham
getReference()とJNDIオブジェクトファクトリの実装をテストしています。私はSimpleNamingContext()を使ってみましたが、モックオブジェクトなので、実際のJNDIフックには実際には当たっていません。 –
テストスイートにスレッドコンテキストクラスローダーを組み込むことを確認してください。 JNDI SPIで最後に作業したときには、コンテキストクラスローダーがほとんどの複雑さを占めていました。 –