2012-04-30 11 views
1

仕様に合わせて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です。

+1

SimpleNamingContext()が機能しているか、単体テストのこの部分であるかどうかテストしていますか? – eabraham

+0

getReference()とJNDIオブジェクトファクトリの実装をテストしています。私はSimpleNamingContext()を使ってみましたが、モックオブジェクトなので、実際のJNDIフックには実際には当たっていません。 –

+0

テストスイートにスレッドコンテキストクラスローダーを組み込むことを確認してください。 JNDI SPIで最後に作業したときには、コンテキストクラスローダーがほとんどの複雑さを占めていました。 –

答えて

1

ファイルシステムコンテキストプロバイダを使用できます。ここにはsource for the jarが1つあります。例はhereです。

+1

受賞者、勝者チキンディナー!ありがとう! –

関連する問題