使用github.com/jarcoal/httpmock验证请求正文

时间:2019-06-18 09:32:36

标签: unit-testing go

我要测试的函数接受数据结构,形成query_dsl,然后进行/_search调用,以使用形成的查询进行弹性搜索。 因此,我想对组成的query_dslurl进行断言。

我在单元测试中使用github.com/jarcoal/httpmock模拟net/http请求。根据文档,它公开func GetCallCountInfo() map[string]int来验证特定端点被击中了多少次。 但是我也想知道发出此调用时的请求正文是什么。

http.Client未公开,因此无法覆盖/模拟该内容以进行测试。

如果无法使用此软件包,那么是否有其他库可以模拟网络请求并保留请求正文?

1 个答案:

答案 0 :(得分:0)

在@georgeok建议之后, 我们可以创建一个模拟http server并在发出请求时捕获请求主体。 以下是创建服务器并存储请求正文的代码段。

server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
        actualRequestBody, err = ioutil.ReadAll(req.Body)
        check(err)
        // Send mock response to be tested
        _, err := rw.Write(bytes)
        check(err)
    }))

    defer server.Close()

现在,我们的请求正文存储在actualRequestBody变量中,我们可以对其进行断言以确保正确性。

确保此功能有效的唯一必要方法是在主机server.URL上进行呼叫。当它在server.URL中提到的地址上启动服务器时。因此,如果将您的代码中的调用发送到其他服务器,则将无法捕获该请求。