Maison > développement back-end > Golang > Comment le package « httptest » de Go peut-il faciliter les tests complets des gestionnaires et des serveurs HTTP ?

Comment le package « httptest » de Go peut-il faciliter les tests complets des gestionnaires et des serveurs HTTP ?

Linda Hamilton
Libérer: 2025-01-02 19:24:50
original
653 Les gens l'ont consulté

How Can Go's `httptest` Package Facilitate Comprehensive Testing of HTTP Handlers and Servers?

Test des appels HTTP dans Go avec httptest

Le package httptest dans Go permet de tester de manière complète les gestionnaires HTTP, les serveurs et les corps de réponse. Il propose deux grandes catégories de tests : les tests de réponse et les tests de serveur.

Tests de réponse

Les tests de réponse vérifient le contenu spécifique des réponses HTTP. Voici un exemple :

func TestHeader3D(t *testing.T) {
    resp := httptest.NewRecorder()

    // Create a request with specified parameters.
    param := make(url.Values)
    param["param1"] = []string{"/home/test"}
    param["param2"] = []string{"997225821"}

    req, err := http.NewRequest("GET", "/3D/header/?"+param.Encode(), nil)
    if err != nil {
        t.Fatal(err)
    }

    // Send the request to the default HTTP server.
    http.DefaultServeMux.ServeHTTP(resp, req)

    // Read the response body.
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        t.Fail()
    }

    // Check the response body for expected content.
    if strings.Contains(string(body), "Error") {
        t.Errorf("header response shouldn't return error: %s", body)
    } else if !strings.Contains(string(body), `expected result`) {
        t.Errorf("header response doen't match:\n%s", body)
    }
}
Copier après la connexion

Tests de serveur

Les tests de serveur impliquent la configuration d'un serveur HTTP et l'envoi de requêtes à celui-ci. Ceci est particulièrement utile pour tester les gestionnaires HTTP personnalisés et le comportement du serveur. Regardons un exemple :

func TestIt(t *testing.T) {
    // Create an HTTP server with a mock handler.
    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json")
        fmt.Fprintln(w, `{"fake twitter json string"}`)
    }))
    defer ts.Close()

    // Update the Twitter URL with the mock server's URL and retrieve a channel for results.
    twitterUrl = ts.URL
    c := make(chan *twitterResult)
    go retrieveTweets(c)

    // Receive and verify the results.
    tweet := <-c
    if tweet != expected1 {
        t.Fail()
    }
    tweet = <-c
    if tweet != expected2 {
        t.Fail()
    }
}
Copier après la connexion

Dans le code fourni, il y a une utilisation inutile d'un pointeur vers r (récepteur) dans err = json.Unmarshal(body, &r), car r est déjà un pointeur . En conséquence, il doit être corrigé comme suit : err = json.Unmarshal(body, r).

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal