2016-09-29 4 views
1

JMSを使用してJUnitテストを実行したいとします。 JUnitテストでJBossやCDIコンテナのようなアプリケーションサーバーの外部でJMSを使用することは可能ですか?JUnitテストでJMSを使用する方法はありますか?

+0

なぜダウン票ですか?これは妥当な質問です。 – chrisl08

+0

@ chrisl08答えが良いです。あるいは、**埋め込みブローカ**を使用して、嘲笑を避けることができます。こうすることで、スタブやモックなしでコンポーネント/クラス間の統合をテストできます。それは実生活に近いものです。 –

答えて

3

メッセージの送信と消費がJMSから完全に切り離されている場合は、それをモックできます。

たとえば、「IMyClassSender」のようなインターフェイスを実装するクラスを作成できます。実際のコード(非junit)では、このクラスすべてがJMSにメッセージを送信します。 junitでは、入力を受け取るクラスでIMyClassSenderを実装し、JMSに送信する場合はそれをコンシューマクラスに渡します。

また、あなたがアクティブMQを使用している場合: - Arquillian(http://arquillian.org)お好みののJavaEE環境内ユニットと統合テストを実行することができます - http://activemq.apache.org/how-to-unit-test-jms-code.html

+0

それは可能な解決策のように聞こえる! Mocking JMS! activemqに関する質問、私はJUnitでそれを使用するためにプロジェクトにactivemqライブラリを含める必要がありますか? – user840930

+0

また、ActiveMQでは、ActiveMQサーバーを実行する必要はありませんか? – user840930

+0

本当に、あなたは 'EmbeddedActiveMQBroker'を使うことができるので、詳細は答えにあるリンクを見てください。 –

0

はまた、アプリケーション、このためのサーバーを使用して再考することができ、管理しますアプリサーバーのライフサイクルはそれ自身で

+0

はい、答えは貴重ですが、Arquillianはニュアンスがあります。その設定は非常に複雑で、その性質は各テストのために "マイクロデプロイメント"を作成することに重点を置いています。テストの実行はかなり長くなります。 –

+0

プラス、質問が明確に "JUnitテストはアプリケーションサーバー外でJMSを使用します" – chrisl08

+0

テストが完了した後、リソースを解放しないというArquillianの既知の問題もあります。この問題は、JenkinsなどのContinuous Deployment環境でテストを実行する予定がある場合には非常に重要です。 – user840930

関連する問題