Maison  >  Article  >  développement back-end  >  Comment tester en direct les gestionnaires de serveurs HTTP avec un routeur à part entière dans Go ?

Comment tester en direct les gestionnaires de serveurs HTTP avec un routeur à part entière dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 04:59:30171parcourir

How to Live Test HTTP Server Handlers with a Full-Fledged Router in Go?

Test en direct des serveurs HTTP dans Go

Question :

Comment puis-je effectuer des tests en direct des gestionnaires de serveurs HTTP, garantissant qu'ils répondent correctement aux méthodes de requête HTTP spécifiques dans le contexte d'un routeur à part entière ?

Réponse :

Pour effectuer des tests en direct de un serveur HTTP, utilisez le type net/http/httptest.Server. Cette approche implique la création d'un serveur de test en direct qui utilise le routeur en question. Par la suite, vous pouvez envoyer des requêtes HTTP à ce serveur de test et valider les réponses par rapport aux résultats anticipés.

Exemple de code :

Le code suivant montre comment utiliser le httptest .Serveur pour les tests en direct :

<code class="go">import (
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestIndex(t *testing.T) {
    // Initialize the router, e.g., a Gorilla mux router as in the question.
    router := mux.NewRouter()
    router.HandleFunc("/", views.Index).Methods("GET")

    // Create a test server using the router.
    ts := httptest.NewServer(router)
    defer ts.Close()

    // Define a function to construct new HTTP requests.
    newreq := func(method, url string, body io.Reader) *http.Request {
        r, err := http.NewRequest(method, url, body)
        if err != nil {
            t.Fatal(err)
        }
        return r
    }

    tests := []struct {
        name string
        r    *http.Request
    }{
        {name: "1: testing get", r: newreq("GET", ts.URL+"/", nil)},
        {name: "2: testing post", r: newreq("POST", ts.URL+"/", nil)}, // reader argument required for POST
    }

    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            resp, err := http.DefaultClient.Do(tt.r)
            defer resp.Body.Close()
            if err != nil {
                t.Fatal(err)
            }

            // Perform validations on the response body, headers, etc.
        })
    }
}</code>

Remarque : Cette approche est applicable à tout routeur implémentant l'interface http.Handler, y compris Gorilla mux, net/http.ServeMux et http. DefaultServeMux.

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