Testen von HTTP-Routen in Golang

Ich benutze Gorilla Mux und das net / http-Paket, um einige Routen wie folgt zu erstellen

package routes

//some imports

//some stuff

func AddQuestionRoutes(r *mux.Router) {
    s := r.PathPrefix("/questions").Subrouter()
    s.HandleFunc("/{question_id}/{question_type}", getQuestion).Methods("GET")
    s.HandleFunc("/", postQuestion).Methods("POST")
    s.HandleFunc("/", putQuestion).Methods("PUT")
    s.HandleFunc("/{question_id}", deleteQuestion).Methods("DELETE")
}

Ich versuche, einen Test zu schreiben, um diese Routen zu testen. Zum Beispiel versuche ich das zu testenGET Route speziell versucht, eine zu bekommen400 zurückgegeben, so habe ich den folgenden Testcode.

package routes

//some imports

var m *mux.Router
var req *http.Request
var err error
var respRec *httptest.ResponseRecorder

func init() {
    //mux router with added question routes
    m = mux.NewRouter()
    AddQuestionRoutes(m)

    //The response recorder used to record HTTP responses
    respRec = httptest.NewRecorder()
}

func TestGet400(t *testing.T) {
    //Testing get of non existent question type
    req, err = http.NewRequest("GET", "/questions/1/SC", nil)
    if err != nil {
        t.Fatal("Creating 'GET /questions/1/SC' request failed!")
    }

    m.ServeHTTP(respRec, req)

    if respRec.Code != http.StatusBadRequest {
        t.Fatal("Server error: Returned ", respRec.Code, " instead of ", http.StatusBadRequest)
    }
}

Wenn ich diesen Test durchführe, erhalte ich jedoch eine404 Möglicherweise, weil die Anforderung nicht richtig weitergeleitet wird.

Wenn ich diese GET-Route vom Browser aus teste, gibt sie a zurück400 Ich bin mir also sicher, dass es ein Problem mit der Art und Weise gibt, wie der Test eingerichtet wird.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage