Heim >Backend-Entwicklung >Golang >Wie simuliert man Lesefehler im Antworttext mit httptest?
Simulieren von Fehlern beim Lesen des Antworttexts mit httptest
Beim Testen von HTTP-Clients mit httptest kann es erforderlich sein, Fehler während des Antworttexts zu simulieren lesen.
Betrachten Sie die folgende Wrapper-Funktion, die Antworttexte verbraucht:
<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>
Um diese Funktion zu testen, kann ein gefälschter Server mit httptest eingerichtet werden:
<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>
Um einen Lesefehler zu erzwingen, ist es wichtig, das Verhalten von Response.Body aus der Dokumentation zu verstehen:
// Body represents the response body. // // ... // If the network connection fails or the server terminates the response, Body.Read calls return an error.
Daher besteht eine einfache Möglichkeit, einen Fehler zu simulieren, darin, eine ungültige HTTP-Antwort vom Testhandler zu erstellen . Wenn Sie beispielsweise über die Länge des Inhalts lügen, kann dies zu einem unerwarteten EOF-Fehler auf der Clientseite führen.
Ein Beispiel für einen solchen Handler:
<code class="go">handler := func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", "1") }</code>
Das obige ist der detaillierte Inhalt vonWie simuliert man Lesefehler im Antworttext mit httptest?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!