You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Groovy内置URL时okhttp3 MockWebServer无法正常工作

问题原因及解决方案

你的测试代码抛出java.io.IOException: Invalid Http response,核心问题有两个:

1. MockResponse构造方式错误

你用Groovy的Map语法new MockResponse(status: 200, body:"Hello!")初始化MockResponse是无效的,MockWebServer的MockResponse类并不支持这种构造方式,导致生成的HTTP响应缺少合法的状态行(比如HTTP/1.1 200 OK),URL的getText()方法无法解析这种不规范的响应,从而抛出异常。

2. 未显式启动MockWebServer

虽然部分版本的MockWebServer会在调用url()时自动启动,但显式调用start()能确保服务器正常监听端口,避免潜在的连接问题。


修正后的测试代码

package org.example
import okhttp3.mockwebserver.MockResponse
import okhttp3.mockwebserver.MockWebServer
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.AfterEach

class MockTest {
    private MockWebServer mockWebServer = new MockWebServer()

    // 测试后关闭服务器,避免端口占用
    @AfterEach
    void tearDown() {
        mockWebServer.shutdown()
    }

    @Test
    void test_a_mock() {
        mockWebServer.start()
        
        // 用链式调用正确构造MockResponse
        def mockResponse = new MockResponse()
            .setResponseCode(200)
            .setBody("Hello!")
        mockWebServer.enqueue(mockResponse)
        
        def bodyText = new URL(mockWebServer.url("/").toString()).getText()
        assert bodyText == "Hello!"
    }

    @Test
    void test_get_google() {
        def bodyText = new URL("https://www.google.com").text
        assert bodyText.size() > 0
    }
}

内容的提问来源于stack exchange,提问作者Chris Curvey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:15:02