对绑定查询参数的 Gin 处理函数进行单元测试时,内存地址无效或 nil由于未正确初始化 HTTP 请求,出现指针取消引用错误。
要使用 c.BindQuery() 模拟查询参数绑定,请使用正确的 URL 和 URL.RawQuery 初始化 HTTP 请求。使用以下辅助函数:
func mockGin() (*gin.Context, *httptest.ResponseRecorder) { req := &http.Request{ URL: &url.URL{}, Header: make(http.Header), } q := req.URL.Query() // Add query parameters to the request // ... req.URL.RawQuery = q.Encode() c, _ := gin.CreateTestContext(httptest.NewRecorder()) c.Request = req return c, httptest.NewRecorder() }
要测试服务调用,请将服务设为接口并将其注入到处理程序中。您可以将服务设置为 Gin 上下文值,从而允许您在单元测试中模拟它。例如:
func GetMaterialByFilter(c *gin.Context) { weldprogService := mustGetService(c) // ... Call the service method ... } func mustGetService(c *gin.Context) services.WeldprogService { svc, exists := c.Get("svc_context_key") if !exists { panic("service was not set") } return svc.(services.WeldprogService) }
在单元测试中,将模拟服务设置到上下文中:
c.Set("svc_context_key", &mockSvc{})
其中mockSvc实现服务接口。
以上是如何使用查询参数有效地对 Gin 处理程序函数进行单元测试?的详细内容。更多信息请关注PHP中文网其他相关文章!