Golang测试基于gin的REST API在使用net/http/httptest时未获取参数
我正在基于Gin golang开发一个REST API,端点如下所示: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
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)
。