我做了从Spring Boot反应式到mvc的迁移。我迁移了控制器,现在尝试迁移集成测试。
控制器的测试是这样注释的,如果我运行测试,它将起作用。
@RunWith(SpringRunner.class)
@WebFluxTest
public class MyIntegrationTest {
}
然后我WebFluxTest像这样替换注释
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
public class MyIntegrationTest {
}
如果我运行此测试,我会reactor.core.Exceptions$ReactiveException: io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: localhost/127.0.0.1:8080。任何想法如何解决?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到 Connection refused
错误通常意味着你的应用没有正确启动或者Web服务器没有在预期的端口上监听。考虑到你从Spring WebFlux迁移到了Spring MVC,这里有几个可能的原因和解决方法:
确保服务正常启动:首先确认你的Spring Boot应用能够独立运行并且可以正常访问。可以通过直接运行主类或使用命令行mvn spring-boot:run
/gradlew bootRun
来验证。
检查端口号配置:错误信息中提到的是8080端口,确认你的Spring Boot应用实际使用的端口是否也是8080。有时候,特别是当有多个服务运行在同一台机器上时,端口冲突是很常见的问题。你可以通过在application.properties
或application.yml
中设置server.port=8080
(或你想要的任何其他端口)来指定端口,并确保测试中的端口与之匹配。
调整@SpringBootTest配置:你已经设置了@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
,这意味着Spring Boot会随机选择一个可用端口来启动嵌入式服务器。如果你希望固定端口,可以改为@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
并确保定义了正确的端口。但既然你遇到了连接拒绝,保持RANDOM_PORT并获取实际分配的端口可能是更好的选择。
使用WebTestClient正确地初始化:由于你使用了@AutoConfigureWebTestClient
,你应该能够在测试类中注入WebTestClient
并使用它来发起请求,而不是直接尝试连接到特定端口。确保你这样使用WebTestClient
来进行测试:
@Autowired
private WebTestClient webTestClient;
// 在测试方法中使用webTestClient
@Test
public void testExampleEndpoint() {
webTestClient.get().uri("/your-endpoint")
.exchange()
.expectStatus().isOk()
// 更多断言...
}
查看日志:仔细检查Spring Boot启动时的日志输出,看是否有任何异常或警告提示,这可能会提供关于为什么应用没有成功启动或监听端口的线索。
网络问题:虽然不太常见,但也要确保本地网络环境没有阻止连接到localhost上的端口。
如果以上步骤都不能解决问题,可能需要更详细的错误日志或了解项目具体配置来进一步诊断。