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

标签 java spring unit-testing jms javabeans

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

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

我想在此测试场景中禁用此 jms 监听器 bean,以便将消息添加到队列中。稍后,我可以启动主应用程序并观察它们的使用情况。

我应该如何处理这个问题?

我想我也可以问我如何禁用一般的 bean。

提前致谢。

最佳答案

您可以使用配置文件 来解决这个问题。

在你的监听器中,添加@Profile注解:

@Profile("!test-without-jmslistener")
public class JmsListenerBean {
    ...
}

这告诉 Spring 如果配置文件“test-without-jmslistener” Activity (感叹号否定条件),它应该只创建这个 bean 的实例。

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

@ActiveProfiles("test-without-jmslistener)
public class MyTest {
    ...
}

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

关于java - 在单元测试中禁用 JMS 使用 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44150522/

相关文章:

java - RedisTemplate getExpire() 在 Springcache 中返回意外值

java - JavaFX 和 Apple M1(硅)芯片和 Intellij 出现问题,错误 : Loading library prism_es2 from resource failed and (mach-o file, 需要 'arm64e' ))

java - 服务同时调用两次

java - JUnit 什么是使 java.io.File.delete() 单元测试失败的最佳方法

java - 将基于配置文件的属性文件解析为 Spring 测试

java - org.xml.sax.SAXParseException : The character reference must end with the ';' delimiter. 需要解决方法

java - 我可以在 Linux 上使用 GreenDAO 进行开发吗?

spring - Jackson 配置以使用rabbitmq 中的记录列表

java - Spring Data JPA 的 @PersistenceConstructor 注释是否与 Hibernate 结合使用?

java - 获取jdk12中java.lang.reflect.Fields的声明字段