Golang测试基于gin的REST API在使用net/http/httptest时未获取参数

Golang测试基于gin的REST API在使用net/http/httptest时未获取参数,rest,testing,go,go-gin,Rest,Testing,Go,Go Gin,我正在基于Gin golang开发一个REST API,端点如下所示: func carsByType(c *gin.Context) { fmt.Println("Go Request in Handler...") carType := c.Params.ByName("type") fmt.Println(carType) if carType != "" { } c.JSON(http.StatusBadRequest, gin.H{"r

我正在基于Gin golang开发一个REST API,端点如下所示:

func carsByType(c *gin.Context) {
    fmt.Println("Go Request in Handler...")
    carType := c.Params.ByName("type")
    fmt.Println(carType)
    if carType != "" {

    }
    c.JSON(http.StatusBadRequest, gin.H{"result": "Bad request"})
    return
}

func main() {
    router := gin.Default()
    router.GET("/cars/:type", carsByType)
    router.Run(":80")
}
当我通过浏览器向端点发出请求并卷曲时,它工作正常,获取carType值,但当我运行测试时,它返回的请求错误,获取的carType为“”

对于测试端点,我的测试代码如下所示:

func TestGetcarsByType(t *testing.T) {
    gin.SetMode(gin.TestMode)
    handler := carsByType
    router := gin.Default()
    router.GET("/cars/1", handler)

    req, err := http.NewRequest("GET", "/cars/1", nil)
    if err != nil {
        fmt.Println(err)
    }
    resp := httptest.NewRecorder()
    router.ServeHTTP(resp, req)
    assert.Equal(t, resp.Code, 200)
}
我做错了什么?

router.GET(“/cars/1”,handler)
在测试中应该是
router.GET(“/cars/:type”,handler)

请注意,更好的方法(更易于测试;路由重复更少)是创建一个返回所有路由的
SetupRouter()*gin.Engine
函数。e、 g

// package main

// server.go
// This is where you create a gin.Default() and add routes to it
func SetupRouter() *gin.Engine {
    router := gin.Default()
    router.GET("/cars/:type", carsByType)

    return router
}

func main() {
    router := SetupRouter() 
    router.Run()
}

// router_test.go
testRouter := SetupRouter()

req, err := http.NewRequest("GET", "/cars/1", nil)
if err != nil {
    fmt.Println(err)
}

resp := httptest.NewRecorder()
testRouter.ServeHTTP(resp, req)
assert.Equal(t, resp.Code, 200)
router.GET(“/cars/1”,handler)
在测试中应该是
router.GET(“/cars/:type”,handler)