Maison > développement back-end > Golang > le corps du texte

Comment simuler les erreurs de lecture du corps de réponse avec httptest ?

Patricia Arquette
Libérer: 2024-10-27 01:05:30
original
413 Les gens l'ont consulté

How to Simulate Response Body Read Errors with httptest?

Simulation des erreurs lors de la lecture du corps de la réponse avec httptest

Lors du test des clients HTTP avec httptest, il peut être nécessaire de simuler des erreurs lors du corps de la réponse lire.

Considérez la fonction wrapper suivante qui consomme les corps de réponse :

<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>
Copier après la connexion

Pour tester cette fonction, un faux serveur peut être configuré à l'aide de 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>
Copier après la connexion

Pour forcer une erreur de lecture, il est essentiel de comprendre le comportement de Response.Body à partir de la documentation :

// Body represents the response body.
//
// ...
// If the network connection fails or the server terminates the response, Body.Read calls return an error.
Copier après la connexion

Par conséquent, un moyen simple de simuler une erreur consiste à créer une réponse HTTP non valide à partir du gestionnaire de test . Par exemple, mentir sur la longueur du contenu peut provoquer une erreur EOF inattendue du côté client.

Un exemple d'un tel gestionnaire :

<code class="go">handler := func(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Length", "1")
}</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!