Das Testen von HTTP-Servern mit Live-Anfragen in Go
Das isolierte Testen von Unit-Testern ist unerlässlich, kann jedoch die Auswirkungen von Routing und anderer Middleware außer Acht lassen . Erwägen Sie für einen umfassenden Test die Verwendung eines „Live-Server“-Ansatzes.
Live-Server-Tests mit httptest.Server
Der Typ „net/http/httptest.Server“ ermöglicht Live-Tests Servertests. Mithilfe des bereitgestellten Handlers (in diesem Fall eines Gorilla-Mux-Routers) wird ein Server erstellt. Hier ist ein Beispiel:
func TestIndex(t *testing.T) {
// Create server using the router initialized elsewhere.
ts := httptest.NewServer(router)
defer ts.Close()
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
}{
// Test GET and POST requests.
{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)
}
// check for expected response here.
})
}
}
Beachten Sie, dass httptest.Server verwendet werden kann, um jeden Handler zu testen, der die http.Handler-Schnittstelle erfüllt, nicht nur Gorilla Mux.
Überlegungen
Während Live-Servertests einen realistischeren Test bieten, können sie auch langsamer und ressourcenintensiver sein als Unit-Tests. Erwägen Sie eine Kombination aus Unit- und Integrationstests für eine umfassende Teststrategie.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3