使用WireMock测试Spring WebFlux代码时出现500错误Connection refused
错误根因&修复方案
1. WireMock配置参数注入错误
你当前的WireMockInit类中TestPropertyValues的使用语法错误,导致WireMock的服务地址没有正确注入到Spring环境变量中,你的WebClient也就没有拿到正确的外部接口地址,默认请求了不存在的端口触发连接拒绝。
修复WireMockInit中的参数注入代码:
// 替换原有TestPropertyValues.of那一行 TestPropertyValues.of("externalBaseUrl=" + wireMockServer.baseUrl()).applyTo(applicationContext);
2. WebClient没有绑定注入的外部地址
你需要新增WebClient配置类,把注入的externalBaseUrl设为WebClient的默认根路径,否则WebClient调用时不会指向WireMock服务:
@Configuration public class WebClientConfig { // 读取注入的WireMock服务地址 @Value("${externalBaseUrl}") private String externalBaseUrl; @Bean public WebClient webClient() { return WebClient.builder() .baseUrl(externalBaseUrl) .build(); } }
3. Controller无打印的排查方案
如果确认修复完上述问题后Controller依旧没有输出,检查两点:
- 你的Controller类上是否加了
@RestController/@Controller注解,且/user端点的@PostMapping配置正确 - Controller类所在的包是否在启动类
WiremockdemoApplication的同级或子包下,否则Spring默认不会扫描到该Bean
可选优化
测试类中WebTestClient的请求不需要手动拼接端口,直接使用相对路径即可,WebTestClient会自动适配当前测试服务的随机端口:
byte[] temp = webTestClient.post() .uri("/user") .contentType(MediaType.APPLICATION_JSON) .body(BodyInserters.fromValue(createUser())) .exchange() .expectBody() .returnResult() .getResponseBody();
另外要确认WireMock用到的response.json文件放在src/test/resources/__files/目录下,否则WireMock会返回404错误。
内容的提问来源于stack exchange,提问作者Neel
相关产品推荐
相关产品推荐

