Heim > Backend-Entwicklung > Golang > Wie teste ich HTTP-Server-Handler live mit einem vollwertigen Router in Go?

Wie teste ich HTTP-Server-Handler live mit einem vollwertigen Router in Go?

Barbara Streisand
Freigeben: 2024-11-03 04:59:30
Original
228 Leute haben es durchsucht

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

Live-Test von HTTP-Servern in Go

Frage:

Wie kann ich Live-Tests durchführen? von HTTP-Server-Handlern, um sicherzustellen, dass sie im Kontext eines vollwertigen Routers korrekt auf bestimmte HTTP-Anforderungsmethoden reagieren?

Antwort:

Um Live-Tests durchzuführen Wenn Sie ein HTTP-Server sind, verwenden Sie den Typ net/http/httptest.Server. Bei diesem Ansatz wird ein Live-Testserver erstellt, der den betreffenden Router nutzt. Anschließend können Sie HTTP-Anfragen an diesen Testserver senden und die Antworten anhand der erwarteten Ergebnisse validieren.

Codebeispiel:

Der folgende Code zeigt, wie der httptest verwendet wird .Server für Live-Tests:

<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>
Nach dem Login kopieren

Hinweis: Dieser Ansatz ist auf jeden Router anwendbar, der die http.Handler-Schnittstelle implementiert, einschließlich Gorilla mux, net/http.ServeMux und http. DefaultServeMux.

Das obige ist der detaillierte Inhalt vonWie teste ich HTTP-Server-Handler live mit einem vollwertigen Router in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage