web-dev-qa-db-ja.com

JMSリスナーで受信メッセージを検証するテストを作成する(スプリングブート)

以下のようなテストを記述したいと思います。

  1. state-info-1にはsrc/mainというリスナーがあります。

  2. 取得したメッセージにいくつかの変更を加え、activemqトピックstate-info-2で新しいメッセージを公開します。

  3. ダミーメッセージを作成して、activemqトピックstate-info-1に公開します。

  4. 最後に、トピックstate-info-2で受信したメッセージが期待どおりであることを確認します。

私のリスナーは似ています。

@JmsListener(destination = "state-info-1", containerFactory = "connFactory")
public void receiveMessage(Message payload) {
    // Do Stuff and Publish to state-info-2
}

これのテストを書くことは可能ですか?または私は他の方法でそれをしなければなりませんか?

また、私はこれを見ました: https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-activemq/src/test/Java /sample/activemq/SampleActiveMqTests.Java

しかし、これは私が期待していることではありません。

ヘルプや正しい方向へのプッシュで十分です。

お時間をいただきありがとうございます。

6
Rajkishan Swami
@SpringBootApplication
public class So42803627Application {

    public static void main(String[] args) {
        SpringApplication.run(So42803627Application.class, args);
    }

    @Autowired
    private JmsTemplate jmsTemplate;

    @JmsListener(destination = "foo")
    public void handle(String in) {
        this.jmsTemplate.convertAndSend("bar", in.toUpperCase());
    }

}

そして

@RunWith(SpringRunner.class)
@SpringBootTest
public class So42803627ApplicationTests {

    @Autowired
    private JmsTemplate jmsTemplate;

    @Test
    public void test() {
        this.jmsTemplate.convertAndSend("foo", "Hello, world!");
        this.jmsTemplate.setReceiveTimeout(10_000);
        assertThat(this.jmsTemplate.receiveAndConvert("bar")).isEqualTo("HELLO, WORLD!");
    }

}
11
Gary Russell