私はこのようなJMSサービスの統合テストを作成しようとしています。JMS統合テスト
@JmsListener(destination = "mailbox", containerFactory = "myFactory")
public void receiveMessage(Email message) throws InterruptedException {
try {
sendEmail(message);
}catch (Exception e){
LOGGER.log(Level.SEVERE,"Failed to deliver email",e);
Thread.sleep(TimeUnit.SECONDS.toSeconds(Optional.of(retryInterval).orElse(5)));
throw e;
}
}
private void sendEmail(Email message){
...............
}
まず、私はこれをどうやって模擬することができますか?私はそれを嘲笑しようとしましたが、メッセージを送信すると、春の起動アプリケーションは実際のJMS Beanを模擬スレッドではなく呼び出しています。このようなことはできないようです。 これが不可能であっても、少なくとも私はbeanを返すことができ、何らかの形でreceiveMessageメソッドが呼び出されているかどうかを確認できます。さらに、それが呼び出されている場合、sendEmailの部分は、何の仕事もしないように偽造されるべきです。私は、テスト用のサブクラスを作成するなどのいくつかのアイデアを持っていますが、いずれかに満足していません。あなたが私にもっと良い仕事を提案できるかどうかを知りたいですか?
実際、私は同様のアプローチを使用し、メモリメッセージングキューと同様にアクティブなmqを使用しました。 2つのプロファイルを作成し、私がinitのやり方を違うところからテストしてprodします。 – Imran