SpringBootTest测试时MockServer抛出Connection refused连接拒绝问题
问题排查与解决方案
1 核心错误原因
你启动MockServer实例时绑定的是1080端口,但初始化MockServerClient时指定连接的是443端口,两者端口不一致,自然无法建立Socket连接。
2 基础修复步骤
- 修改
MockServerClient的端口参数,和启动端口保持一致:
把代码里的new MockServerClient("localhost", 443)改为new MockServerClient("localhost", 1080) - 如果你确实需要MockServer监听443端口,直接修改启动代码的端口参数即可:
mockServer = startClientAndServer(443);,注意443是系统特权端口,启动需要对应权限,更推荐用自定义高位端口。
3 额外排查项(修改端口后仍报错可核对)
- 检查
@BeforeClass修饰的方法是否符合规范:JUnit4的@BeforeClass要求方法必须是public static修饰,你当前的startServer方法没有加static修饰符,会导致MockServer根本没有启动,调整后代码如下:
private static ClientAndServer mockServer; @BeforeClass public static void startServer() { mockServer = startClientAndServer(1080); }
- 检查绑定端口是否被其他进程占用:
Windows系统执行命令:netstat -ano | findstr "1080"
Linux/macOS系统执行命令:lsof -i:1080
如果端口被占用,要么关闭占用端口的进程,要么更换MockServer的启动端口。 - 核对MockServer依赖版本是否存在冲突,排除依赖传递导致的类缺失、启动失败问题。
4 修复后完整代码示例
private static ClientAndServer mockServer; @BeforeClass public static void startServer() { mockServer = startClientAndServer(1080); } @Test void downloadByUserShouldRetry() { // given new MockServerClient("localhost", 1080) .when( request() .withSecure(true) .withMethod("GET") .withPath("myUrl") .withHeader("Authorization", "Bearer " + adminAccessToken), exactly(1) ) .respond( response() .withStatusCode(401) .withHeaders( new Header("Content-Type", "application/json; charset=utf-8"), new Header("Cache-Control", "public, max-age=86400") ) .withBody("{ message: 'incorrect username and password combination' }") .withDelay(TimeUnit.SECONDS,1) ); }
内容的提问来源于stack exchange,提问作者k-wasilewski
相关产品推荐
相关产品推荐

