【问题标题】:why is my spring-cloud-stream test configuration also starting up rabbitMQ listeners in another class?为什么我的 spring-cloud-stream 测试配置也在另一个类中启动 rabbitMQ 侦听器?
【发布时间】:2019-01-10 16:00:09
【问题描述】:

我正在尝试做一个简单的 spring-cloud-stream 单元测试来验证流之间的连接;基本上,处理程序可以从一个流中读取并写入另一个流。这部分工作正常。问题是应用程序的其他部分也正在启动;即rabbitMQ监听器。在另一个类中有一个方法(除了我正在测试的那个),它有@RabbitListener。这是被调用的方法。而且我确实有兔子在我的机器上本地运行,用于本地开发测试。但我不希望在测试范围内调用它。

spring-cloud-stream 测试文档here 示例有

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT)

我认为是 @SpringBootTest 启动了整个配置,包括 RabbitMQ 侦听器。我已经删除了 webEnvironment 参数,但这并没有什么不同。

目前,解决方法是将 spring.rabbitmq.listener.simple.auto-startup: false 放在 application.yml 中,但这不是我想要继续的各种原因,其中之一是我可能想要在某一时刻对那个 rabbitlistener 进行单元测试,尽管是在一个适当限制的测试上下文中。

我们正在使用 spring-cloud-stream 和 spring-cloud-stream-test-support 的 2.0.1 版本,尽管这似乎是一个更基本的 spring 配置问题,我不明白如何限制上下文.

【问题讨论】:

    标签: spring unit-testing spring-boot spring-cloud-stream spring-config


    【解决方案1】:

    您可以在autoStartup 属性中使用属性占位符

    spring.rabbitmq.listener.simple.auto-startup: ${auto.start:true}
    

    然后在测试用例中使用@TestPropertySource 将其设置为false。

    【讨论】:

    • 谢谢;那么在另一个我想要它的测试中,我将如何再次打开它?是@Value 吗?
    • 省略该类中@TestPropertySource 的属性(或将其设置为true);或者您可以@Autowired RabbitListenerEndpointRegistry 并从测试中调用registry.getListenerContainer(id).start(),其中idid 上的id 属性@RabbitListener
    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 2019-03-27
    • 2019-06-03
    • 2018-01-24
    • 2019-03-16
    • 2021-11-20
    • 2019-05-30
    • 1970-01-01
    相关资源
    最近更新 更多