Я написал оболочку http-клиента в go, и мне нужно тщательно ее протестировать.
Я читаю тело ответа с 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 в оболочке?
Я понимаю, что вы, кажется, думаете, что это дубликат этого поста , и хотя вы можете в это верить или, возможно, просто пометить его как дубликат не очень мне поможет. Код, приведенный в ответах в «повторяющемся» посте, не имеет для меня особого смысла.