Heim >Backend-Entwicklung >Golang >Wie simuliert man Lesefehler im Antworttext mit httptest?

Wie simuliert man Lesefehler im Antworttext mit httptest?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 01:05:30477Durchsuche

How to Simulate Response Body Read Errors with 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn