为什么我的 spring-cloud-stream 测试配置也在另一个 class 中启动了 rabbitMQ 侦听器?

why is my spring-cloud-stream test configuration also starting up rabbitMQ listeners in another class?

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

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 不明白如何限制上下文的配置问题

您可以在 autoStartup 属性

中使用 属性 占位符
spring.rabbitmq.listener.simple.auto-startup: ${auto.start:true}

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