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>
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>
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.
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>
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!