我要测试的函数接受数据结构,形成query_dsl
,然后进行/_search
调用,以使用形成的查询进行弹性搜索。
因此,我想对组成的query_dsl
和url
进行断言。
我在单元测试中使用github.com/jarcoal/httpmock
模拟net/http
请求。根据文档,它公开func GetCallCountInfo() map[string]int
来验证特定端点被击中了多少次。
但是我也想知道发出此调用时的请求正文是什么。
http.Client
未公开,因此无法覆盖/模拟该内容以进行测试。
如果无法使用此软件包,那么是否有其他库可以模拟网络请求并保留请求正文?
答案 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
中提到的地址上启动服务器时。因此,如果将您的代码中的调用发送到其他服务器,则将无法捕获该请求。