2011-02-04 18 views
2

JUnitで実行したいテストがあります。これはコードがJMSを使用して呼び出す複雑なサービスに依存しているため、JUnitテストを実行しているときにはこれにアクセスすることはできません。したがって、このサービスを呼び出す必要があることを考えれば、JUnitテストの実行中に呼び出されたときにハードコーディングされた応答を返すように、このサービスをスタブする最善の方法は何ですか?ユニットテストのJMS依存関係

今はJNDIを使用してキューをルックアップしています。これはeasymockを使用して問題なく動作します。しかしでもはスタブサービスからの応答キューで応答を受け取る必要があります(非常に重要です)。

+0

同期または非同期の呼び出しですか? –

+0

テスト中のコードをサービスから分離することは価値がありますか? –

+0

@Romain Hppeau:同期です。懸念は普遍的ですが、私はそれが問題ではないと言います。 – Zombies

答えて

1

ユニットテストで組み込みActiveMQを使用したことはありますか?

http://activemq.apache.org/how-to-unit-test-jms-code.html

+0

これは自分のスタブサービスを挿入する方法を説明していません。有効な返答が返ってこない限り、単体テストは私が望むように動作しません。有効なレスポンスは、ハードコードされたXML文字列である可能性があります。 – Zombies

1

はどのように応答が応答キューに渡すことになっていますか?私は特定のコールバックメソッドをどこかで呼び出すことによって起こると仮定します。誰がその方法にアクセスできますか?

応答キューがスタブサービスに渡された場合は、EasyMock経由で応答キューを取得し、そのメソッドを直接呼び出すことができます。これを行う方法は、the EasyMock documentation(「キャプチャ」を検索)で非常に簡単に説明されています。簡単な例:

Capture<Queue> replyQueueCapture = new Capture<Queue>(); 
... 
MessageService stubService = createMock(MessageService.class); 
stubService.sendMessage(capture(replyQueueCapture)); 
... 
// run the test which indirectly invokes the stub service 
... 
Queue replyQueue = replyQueueCapture.getValue(); 
replyQueue.offer(replyMessage);