1

仕様に応じて 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;
}

現在動作中のテスト クラスの完全なソース コードはこちらです。

4

1 に答える 1

1

ファイル システム コンテキスト プロバイダーを使用できます。jar のソースの 1 つを次に示します。ここに例があります。

于 2012-04-30T22:02:28.757 に答える