编写测试以验证jms侦听器中收到的消息(Spring-Boot)

时间:2017-03-15 07:37:24

标签: spring-boot jms activemq spring-jms spring-test

我想为下面的内容编写测试;

  1. state-info-1中有一个名为src/main的监听器。

  2. 它会对收到的任何邮件进行一些更改,并在activemq主题state-info-2上发布新邮件。

  3. 我将构建一条虚拟消息并发布到activemq主题state-info-1

  4. 最后验证,收到的关于主题state-info-2的消息就像我预期的那样。

  5. 我的听众就像;

    @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

    但这不是我所期待的。

    任何帮助或推动正确的方向都足够了。

    感谢您的时间。

1 个答案:

答案 0 :(得分:10)

@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!");
    }

}