Maison >développement back-end >Golang >Comment tester efficacement les appels HTTP en Go à l'aide du package « httptest » ?

Comment tester efficacement les appels HTTP en Go à l'aide du package « httptest » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-16 09:25:11656parcourir

How to Effectively Test HTTP Calls in Go Using the `httptest` Package?

Comment tester les appels HTTP dans Go à l'aide de httptest

Dans Go, le package httptest offre un moyen pratique de tester vos appels HTTP. Il fournit à la fois des tests de réponse et de serveur pour un examen approfondi de la fonctionnalité HTTP de votre application.

Tests de réponse

Les tests de réponse se concentrent sur la validation de la réponse elle-même. Par exemple, vous pouvez vérifier le code d'état, les en-têtes et le contenu de la réponse. Voici un exemple :

func TestHeader3D(t *testing.T) {
    resp := httptest.NewRecorder()
    // ... setup the request with headers and parameters ...
    http.DefaultServeMux.ServeHTTP(resp, req)
    // ... assert the response body and content type ...
}

Tests de serveur

Les tests de serveur, en revanche, vous permettent de tester l'ensemble du serveur HTTP, y compris ses routes et ses gestionnaires. Cette approche peut être utile pour tester le flux de requêtes via votre application. Voici un exemple utilisant la méthode httptest.NewServer() :

func TestIt(t *testing.T) {
    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // ... your handler setup and response ...
    }))
    defer ts.Close()
    // ... setup your requests and make assertions based on the responses ...
}

Dans votre cas spécifique, vous pouvez utiliser des tests de serveur pour vous moquer de l'API de recherche Twitter avec une réponse prévisible. Cela vous permet de tester votre fonction sans effectuer d'appels HTTP réels.

func TestRetrieveTweets(t *testing.T) {
    ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Set up your mock response for the Twitter API ...
    }))
    defer ts.Close()
    twitterUrl = ts.URL
    c := make(chan *twitterResult)
    go retrieveTweets(c)
    // ... assert the results you receive in the `c` channel ...
}

N'oubliez pas que le paramètre r de votre fonction retrieveTweets est déjà un pointeur, il n'est donc pas nécessaire de le transmettre comme pointeur dans json.Unmarshal. .

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:
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