web-dev-qa-db-ja.com

Message Queue(JMS)のモックまたはシミュレーション

メッセージ(テキスト)があり、そのフォーマットと内容は間違いなく知っています。
今のところ、このメッセージを解析してファイルから読み取るJavaのクラスが実装されています。

実際には、このメッセージはMessage Queueから送信されます。

今のところ、テストのためにローカルPCでMessage Queueをシミュレート、モック、または生成する必要があります。

Java仕様( Java jms ):

JMS provider: A messaging system that implements the JMS specification.
JMS clients: Java applications that send and receive messages.
Messages: Objects that are used to communicate information between JMS clients.

この仕様については、JMSプロバイダーが必要です。

JMSクライアント-メッセージを読み取るのは私のクラスです。
Message自体は知っています。

だから問題はメッセージキューを開始する方法ですか?
Javaコードからプログラムでそれをどのようにシミュレートできますか?どういうわけかそれを模擬できますか?

ありがとう。

22
sergionni

Spring Integration を使用すると、これを簡単に行うことができます。非常に基本的な抽象的な「チャネル」実装があります。プロデューサーとコンシューマーを作成してテストできます。さらに一歩進める準備ができたら、チャネルの上にJMSアダプターを指定するだけです。

6
jcalvert

実際のプロダクションJMSプロバイダーが利用できないときにアプリケーションを分離してテストするには、次のいずれかを使用できます。

  1. JMSモック:
    アプリケーションをテストするとき、 test doubles を使用して、存在しない依存関係をシミュレートできます。実際のJMSプロバイダーの動作をシミュレートするJMSモックを使用できます。 APIシミュレーションツール を使用すると、JMSモックを作成できます(たとえば、JMSをサポートするツールを選択するだけです Traffic Parrot )。 JMSモックを使用すると、テスト中に高度な柔軟性が得られます。ほぼすべてのタイプのメッセージを返すようにモックを設定することにより、典型的な実稼働のようなテストシナリオだけでなく、架空の状況をテストすることもできます。また、さまざまなタイプのエラーをシミュレートすることもできます。これは、実際のJMSプロバイダーでは実行が難しいことがよくあります。 このActiveMqのJMSサービス仮想化の紹介ビデオ (サービス仮想化はモックの別の名前です)または これはIBM MQの場合 をご覧ください。これらのビデオはTraffic Parrotからのものですが、そこで説明されている原則は、選択したすべてのツールに適用されます。

  2. JMSプロバイダーテストインスタンス:
    JMSプロバイダーをラップトップまたはテスト環境の1つで実行し、本番プロバイダーではなくアプリケーションに接続できます。 ActiveMQやRabbitMQのような本番環境でオープンソースプロバイダーを使用する場合、軽量で無料であるため、ラップトップでそれらを実行するのも簡単です。 IBM Websphere MQの場合、無料の IBM MQ for Developers を使用できます。

  3. JMSクラスモック:
    Mockito を単体テストで使用して、JMSクラスとの相互作用を模擬できます。このソリューションには、単体テストのすべてのトレードオフが伴います。それらの詳細については testing pyramid を参照してください。

アプリケーションをブラックボックステストする場合は、上記で説明したソリューションのいずれかを使用してください。

2
Wojtek

一般に、JMSなどの外部システムをモックまたはシミュレートすることは悪い習慣です。より良いアイデアは、ロジックをスタンドアロンBeanに抽象化し、JMSとBeanをブリッジする委譲層を実装することです。このような設計により、JMSから分離してBe​​anをテストし、実際のJMSシステムとの統合全体をテストするシステムテストを行うことができます。

インプロセスJMSについては SomnifugiJMS を参照できます。

0
Eugene Kuleshov