Wie simuliert man Lesefehler im Antworttext mit httptest?

Patricia Arquette
Freigeben: 2024-10-27 01:05:30
Original
413 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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.
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!