gpt4 book ai didi

测试 HTTP 请求时出现 Nil 取消引用错误

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:36 25 4
gpt4 key购买 nike

我正在尝试在我的 Go 库中测试 HTTP 请求。进行调用的对象通过依赖注入(inject)接受 HTTP 客户端对象,因此在我的测试中,我像这样模拟 HTTP 客户端:

func TestMyObject(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
w.Header().Set("Content-Type", "application/json")
fmt.Fprintln(w, mockJSONResponse)
}))
defer server.Close()

// Make a transport that reroutes all traffic to the example server
transport := &http.Transport{
Proxy: func(req *http.Request) (*url.URL, error) {
return url.Parse(server.URL)
},
}

// Make a http.Client with the transport
httpClient := &http.Client{Transport: transport}

// I am passing the httpClient to my object
}

这是在我的对象中发出 HTTP 请求的方式:

// Make - makes a prepared HTTP request
func (ir *MyObject) Make() *http.Response {
if ir.Err != nil {
return nil
}

ir.resp, ir.Err = ir.Client.Do(ir.req)

runtime.SetFinalizer(ir, func(ir *MyObject) {
ir.resp.Body.Close()
})

ir.logReqRes()
ir.checkErrorResponse()

return ir.resp
}

虽然我得到了 nil 指针取消引用错误:

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference

在此函数中(我正在尝试记录响应):

// Logs request and response
func (ir *MyObject) logReqRes() {
log.Print("AAAAAAA")
log.Print(ir.resp)
log.Print("AAAAAAA")
if reqInfo, err := httputil.DumpRequest(ir.req, true); err == nil {
log.Print("Logging request:")
log.Print(string(reqInfo))
}
if respInfo, err := httputil.DumpResponse(ir.resp, true); err == nil {
log.Print("Logging response:")
log.Print(string(respInfo))
}
}

如您所见,ir.resp 出于某种原因为 nil。有什么想法吗?

最佳答案

好的。我发现了一个问题。更好的错误记录实际上表明我的错误非常简单。

我将其作为 URL 传递给模拟的 HTTP 客户端:

host/api/v1/tokens/

导致此错误的原因:

Post host/api/v1/tokens/: unsupported protocol scheme

显然,即使您使用的是测试服务器,URL 也必须包含正确的 HTTP 方案 (http://)。

关于测试 HTTP 请求时出现 Nil 取消引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com