我已经在 Go 语言中编写了 HTTP 客户端包装器,并且需要对其进行全面测试。在包装器中,我使用 ioutil.ReadAll 读取响应体。但是,我遇到了一些麻烦,无法确定如何借助 httptest 强制使响应体读取失败。
package req
func GetContent(url string) ([]byte, error) {
response, err := httpClient.Get(url)
// some header validation goes here
body, err := ioutil.ReadAll(response.Body)
defer response.Body.Close()
if err != nil {
errStr := fmt.Sprintf("Unable to read from body %s", err)
return nil, errors.New(errStr)
}
return body, nil
}
我假设我可以这样设置一个虚假服务器:
package req_test
func Test_GetContent_RequestBodyReadError(t *testing.T) {
handler := func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
}
ts := httptest.NewServer(http.HandlerFunc(handler))
defer ts.Close()
_, err := GetContent(ts.URL)
if err != nil {
t.Log("Body read failed as expected.")
} else {
t.Fatalf("Method did not fail as expected")
}
}
我假设需要修改ResposeWriter。现在,是否有任何办法可以修改responseWriter并强制包装器中的ioutil.ReadAll失败?
我意识到你似乎认为这是此帖子的重复,并且虽然您可能认为是这样或者它可能是,但仅将其标记为重复并不能真正帮助我。在“重复”帖子中提供的答案代码在这种情况下几乎没有意义。