我构建了一个接收JMS消息的Spring应用程序(@JmsListener
)。
在开发期间,我想将一些消息发送到侦听器侦听的JMS队列,因此我编写了一个发送一些消息的单元测试(JmsTemplate
)。在这个单元测试中,我使用@SpringBootTest
和@RunWith(SpringRunner.class)
来加载应用程序上下文(数据源的bean等)。
然而,当单元测试开始时,它还会加载直接开始使用我的新消息的jms监听器bean。
我想在此测试场景中禁用此jms侦听器bean,以便将消息添加到队列中。然后,我可以启动主应用程序并观察它们被消耗。
我该如何处理?
我想我也可以问过如何禁用bean。
提前致谢。
答案 0 :(得分:6)
您可以使用个人资料来解决此问题。
向您的听众添加@Profile
注释:
@Profile("!test-without-jmslistener")
public class JmsListenerBean {
...
}
这告诉Spring,如果配置文件“test-without-jmslistener”不处于活动状态(感叹号否定条件),它应该只创建此bean的实例。
在单元测试类中,添加以下注释:
@ActiveProfiles("test-without-jmslistener)
public class MyTest {
...
}
现在Spring测试运行器将在运行测试之前激活此配置文件,Spring将不会加载您的bean。
答案 1 :(得分:0)
此问题的另一个解决方案:将@SpringBootTest
@RunWith(SpringRunner.class)
@ComponentScan(basePackages="com.pechen.demo", excludeFilters=@Filter(type=FilterType.ASSIGNABLE_TYPE, classes=JmsListener.class))
public class MyTest(){
}
添加到测试类以跳过指定bean的加载。
<p class="text-justify last-body" ng-app>
This growing collection of studies, curated by
<a ng-init="imgsrc={
src: 'http://wallpaper-gallery.net/images/pig-images/pig-images-12.jpg',
show: false,
};">
<span ng-mouseover="imgsrc.show = true" ng-mouseout="imgsrc.show = false">
Yours Truly
</span>
<img ng-src="{{ imgsrc.src }}" ng-show="imgsrc.show" />
</a>,
is focused primarily
on studies dealing with eh tohp ah key pig*. As a fan of mooshoo and aigeiaig, I'm open to
working with any dataset ranging from yakdkat studies to lakuktauka. If you would like
to submit a study for publishing, or if you have any questions about a particular study,
please feel free to <a href="/contact">Contact Me.</a> Thank you for visiting, and happy wamotiem!
</p>
答案 2 :(得分:0)
我认为您可以通过以下代码来做到这一点:-
private void stopJMSListener() {
if (customRegistry == null) {
customRegistry = context.getBean(JmsListenerEndpointRegistry.class);
}
customRegistry.stop();
}
private void startJMSListener() {
if (customRegistry == null) {
customRegistry = context.getBean(JmsListenerEndpointRegistry.class);
}
customRegistry.start();
}
答案 3 :(得分:0)
除了使用配置文件,您还可以通过以下属性来实现此目的:
@ConditionalOnProperty(name = "jms.enabled", matchIfMissing = true)
public class JmsListenerBean {
...
}
matchIfMissing属性告诉Spring默认情况下将此属性设置为true。 在测试类中,您现在可以禁用JmsListenerBean:
@TestPropertySource(properties = "jms.enabled=false")
public class MyTest {
...
}