gpt4 book ai didi

java - 使用测试中的 Spring Cloud Stream 连接到消息代理

转载 作者:行者123 更新时间:2023-12-02 02:12:21 25 4
gpt4 key购买 nike

有一些文章介绍了如何在不使用 spring-cloud-stream-test-support 连接到消息系统的情况下测试 Spring Cloud Stream 应用程序。但我想从集成测试中真正连接到 RabbitMQ,但无法做到这一点。这是测试类:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@EnableBinding(Source.class)
public class StreamIT {

@Autowired
private Source source;

@Test
public void testMessageSending() throws InterruptedException {
source.output().send(MessageBuilder.withPayload("test").build());
System.out.println("Message sent.");
}

}

一切都与 @SpringBootApplication 中的相同,它们使用 application.yml 中的相同属性。

但是没有发送消息的日志行(o.s.a.r.c.CachingConnectionFactory:创建了新连接:SpringAMQP#22e79d25:0/SimpleConnection@5cce3ab6 [delegate=amqp://guest@127.0.1.1:5672/, localPort = 60934]
),即使没有启动代理,也不会出现java.net.ConnectException:连接被拒绝(连接被拒绝)

我做错了什么吗?创建与代理的真实连接并从测试发送消息需要什么?

最佳答案

由于您在测试中使用@SpringBootTest注释,Spring Boot将评估所有可用的自动配置。

如果您的测试类路径中有 spring-cloud-stream-test-support 依赖项,那么还将评估以下自动配置:

  • org.springframework.cloud.stream.test.binder.TestSupportBinderAutoConfiguration
  • org.springframework.cloud.stream.test.binder.MessageCollectorAutoConfiguration

因此,应用程序上下文中只有一个绑定(bind)器 - org.springframework.cloud.stream.test.binder.TestSupportBinder。从它的名字就可以明白,它对真正的绑定(bind)没有任何作用。

从测试类路径中排除/删除 spring-cloud-stream-test-support 依赖项 - 是一个可疑的解决方案。因为它迫使您为单元测试和集成测试创建两个单独的模块。

如果您想在测试中排除前面提到的自动配置。您可以按如下方式进行:

@RunWith(SpringRunner.class)
@SpringBootTest
@EnableAutoConfiguration(exclude = {TestSupportBinderAutoConfiguration.class, MessageCollectorAutoConfiguration.class})
public class StreamIT {

关于java - 使用测试中的 Spring Cloud Stream 连接到消息代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49816044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com