我已经在 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 失败吗?
我意识到您似乎认为它是这篇文章的副本,虽然您可能会这样认为或可能是,但仅将其标记为重复并不能真正帮助我。在这种情况下,“重复”帖子中答案中提供的代码对我来说意义不大。
元芳怎么了
慕后森
相关分类