24

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

現実の世界では、このメッセージはメッセージキューから送信されます。

今のところ、テスト目的で、ローカルPCでメッセージキューをシミュレート、モック、または生成する必要があります。

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クライアント-メッセージを読み取るのは私のクラスです。私が知っている
メッセージ自体。

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

ありがとう。

4

4 に答える 4

10

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

  1. JMSモック:アプリケーションをテストするときに、 testdoubles
    を使用して存在しない依存関係をシミュレートできます。実際のJMSプロバイダーの動作をシミュレートするJMSモックを使用できます。APIシミュレーションツールを使用すると、JMSモックを作成できます(JMSをサポートするツール(Traffic Parrotなど)を選択するだけです)。JMSモックを使用すると、テスト中に高レベルの柔軟性が得られます。ほぼすべてのタイプのメッセージを返すようにモックを設定することで、一般的な本番環境のようなテストシナリオだけでなく、架空の状況もテストできます。また、実際のJMSプロバイダーでは実行が難しいさまざまなタイプのエラーをシミュレートすることもできます。見てActiveMq用のJMSサービス仮想化(サービス仮想化はモックの別名)またはIBMMQ用のこの紹介ビデオ。これらのビデオはTrafficParrotからのものですが、そこで説明されている原則は、選択したすべてのツールに適用されることに注意してください。

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

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

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

于 2017-12-08T13:06:45.003 に答える
6

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

于 2010-10-19T18:04:37.213 に答える
0

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

インプロセスJMSについては、SomnifugiJMSを参照してください。

于 2010-10-19T16:53:13.687 に答える
-2

一般的に私はEugeneKuleshovに同意します。しかし、それでもそのようなモックが必要な場合は、java.util.concurentパッケージのBlckingQueueを使用することをお勧めします。javax.jms.Queueインターフェースでラップすることは大きな問題ではないと思います。ところで、それはある種のオープンソースプロジェクトにとっては良い考えです。

于 2010-10-19T19:00:39.420 に答える