在单元测试中禁用JMS使用bean

cod*_*ith 5 java spring unit-testing jms javabeans

我构建了一个接收JMS消息(@JmsListener)的Spring应用程序.在开发期间,我想将一些消息发送到侦听器侦听的JMS队列,因此我编写了一个发送一些消息的单元测试(JmsTemplate).在这个单元测试中,我使用@SpringBootTest@RunWith(SpringRunner.class)加载应用程序上下文(数据源的bean等).

但是,当单元测试开始时,它还会加载jms监听器bean,它直接开始使用我的新消息.

我想在此测试场景中禁用此jms侦听器bean,以便将消息添加到队列中.然后,我可以启动主应用程序并观察它们被消耗.

我该怎么做呢?

我想我也可以问一下如何禁用bean.

提前致谢.

Rol*_*ble 6

您可以使用配置文件来解决此问题.

对于您的侦听器,添加@Profile注释:

@Profile("!test-without-jmslistener")
public class JmsListenerBean {
    ...
}
Run Code Online (Sandbox Code Playgroud)

这告诉Spring,如果配置文件"test-without-jmslistener" 激活(感叹号否定条件),它应该只创建此bean的实例.

在单元测试类中,添加以下注释:

@ActiveProfiles("test-without-jmslistener)
public class MyTest {
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,Spring测试运行器将在运行测试之前激活此配置文件,Spring将不会加载您的bean.