RabbitMQ は Erlang で記述されているため、たとえば ActiveMQ JMS ブローカーのように JVM に埋め込むことはできません。
しかし実際には、別の言語で行われ、統合テストに簡単に組み込むことができるプロジェクトがいくつかあります。
たとえば、C++ で記述された MongoDB は、 https ://github.com/flapdoodle-oss/embedmongo.flapdoodle.de を使用して、JVM 統合テストのコンテキストで簡単に開始/停止できます。
Java に移植する人もいます: https://github.com/thiloplanz/jmockmongo/
では、私のアプリケーションが Java で書かれていて、他のテクノロジが別の言語 (RabbitMQ の Erlang など) で書かれている場合、どのように統合テストを行うことができるのでしょうか?
一般的に、良い慣行は何ですか?
主な解決策は 3 つあります。
- 実際の RabbitMQ の開始
- 現在使用されている言語にテクノロジの JVM ポートを埋め込む
- 標準テクノロジを使用して、Erlang のテクノロジが Java の別のテクノロジと同じ動作と通信レイヤーを持つようにします (RabbitMQ / Qpid / AMQP を実装する StormMQ)
一時的な RabbitMQ ブローカーを起動するための Maven/Sbt/Ant プラグインはありますか? テストクラスの前に Junit/TestNG RabbitMQ をサポートするプロジェクトはありますか?
Java で AMQP のオープンソース実装があることを確認しました: Apache Qpid 本番環境 で RabbitMQ がある場合に、この実装を統合テストに使用した経験はありますか? それは可能ですか?私はSpring Integrationを使用しています。
ところで、Spring-AMQP プロジェクトの github readme で次のように言及されていることに気付きました。
ここでの「統合」テストの多くは、実行中の RabbitMQ サーバーを必要とします。ブローカーが検出されない場合はスキップされます。