Javaで記述された単純なAMQPサーバー/ブローカーの実装はありますか?
ローカル統合テストに使用する必要があります。ant / mavenから始めたいのですが、クラスタリング、永続性、パフォーマンスなどの機能は必要ありません。インストール(maven pomでの依存関係と同じように)と構成がない、単なるモックのRabbitMQのようなインスタンス。
Javaで記述された単純なAMQPサーバー/ブローカーの実装はありますか?
ローカル統合テストに使用する必要があります。ant / mavenから始めたいのですが、クラスタリング、永続性、パフォーマンスなどの機能は必要ありません。インストール(maven pomでの依存関係と同じように)と構成がない、単なるモックのRabbitMQのようなインスタンス。
MQ内で行われるすべてのことを含め、アプリケーション全体をテストする統合テスト/エンドツーエンドテスト/自動ユーザー受け入れテストを作成することは完全に合法だと思います。テストのフィードバックループが大幅に遅くなるため、このようなものを賢く起動するテストケースを選択する必要があります。
org.apache.qpidがあります。これは、mvn / gradle (mvn center)依存関係(gradleの例)としてアプリケーションに含めることができます。
testCompile 'org.apache.qpid:qpid-broker:6.0.1'
次に、テストの前にブローカーを起動するRule
を含むを追加します。これは、このかなり単純なセットアップにいくぶん似ています。ExternalResource
@Rule
private static final ExternalResource embeddedAMQPBroker = new ExternalResource() {
Broker broker;
@Override
protected void before() throws Throwable {
BrokerOptions brokerOptions = new BrokerOptions();
brokerOptions.setConfigProperty("qpid.amqp_port", "55672");
broker = new Broker();
broker.startup(brokerOptions);
}
@Override
protected void after() {
broker.shutdown();
}
};
すべてのアプリケーションにJetty9が含まれており、QPID(まだ)にはJetty <9が必要なため、これは機能しませんでした。
探しているのはAMQPモックオブジェクトです。私は本当に何も知りませんし、あなたがすぐに見つけられることを疑っています。
テストとしてJUnitを使用している場合は、UNITテストを実行しています。単体テストは統合テストとは異なり、実際のキューへの読み取り/書き込みは含まれません。
たぶんここで、テストまたはコードを再構築して、キューへの読み取り/書き込み以外のすべてを含めることができますか?
もう1つのオプションは、移植性のためにAMQPを他のクラスにラップした場合、そのオブジェクトをモックすることです。
2016年に私の回答を公開した後、つい最近、新しいオプションが私の注目を集めました。
RabbitMQ Mock(https://github.com/fridujo/rabbitmq-mock)プロジェクトは正確な目的を果たし、はるかに軽量です。まだ非常に若いプロジェクトですが(2018年5月に開始されたばかりです)、自分で統合テストに使用することができました。
モックが「本物」のように機能することを確認するために、最初にRabbitMQインスタンスに対してコードを実行し、その後モックに切り替えます。