Mensimulasikan Ralat pada Badan Respons Baca dengan httptest
Apabila menguji klien HTTP dengan httptest, mungkin terdapat keperluan untuk mensimulasikan ralat semasa badan respons baca.
Pertimbangkan fungsi pembungkus berikut yang menggunakan badan tindak balas:
<code class="go">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 }</code>
Untuk menguji fungsi ini, pelayan palsu boleh disediakan menggunakan httptest:
<code class="go">package req_test import ( "net/http" "net/http/httptest" "testing" ) 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") } }</code>
Untuk memaksa ralat baca, adalah penting untuk memahami gelagat Response.Body daripada dokumentasi:
// Body represents the response body. // // ... // If the network connection fails or the server terminates the response, Body.Read calls return an error.
Oleh itu, cara mudah untuk mensimulasikan ralat adalah dengan mencipta respons HTTP yang tidak sah daripada pengendali ujian . Contohnya, pembohongan tentang panjang kandungan boleh menyebabkan ralat EOF yang tidak dijangka pada pihak pelanggan.
Contoh pengendali sedemikian:
<code class="go">handler := func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", "1") }</code>
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Ralat Baca Badan Respons dengan httptest?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!