使用testify测试Gin API返回404响应码,正常运行接口可访问
问题根因
你测试代码中初始化的是空白的Gin路由实例,没有注册业务代码中定义的/api/v1/statistics/projects接口路由,请求找不到对应处理逻辑就会返回404。而你正常启动服务时,已经把所有业务路由注册到了路由实例上,所以可以通过curl、浏览器正常访问。
修复方案
- 第一步:复用项目中已完成业务路由注册的路由初始化方法,不要在测试代码中单独创建空白路由实例。
通常项目中会封装统一的路由初始化函数,用于服务启动时注册所有接口,示例如下:// 项目原有路由初始化逻辑,正常启动服务时会调用该方法 func SetupRouter() *gin.Engine { r := gin.Default() v1Group := r.Group("/api/v1") { statGroup := v1Group.Group("/statistics") // 此处已注册你要测试的目标接口 statGroup.GET("/projects", getProjectsHandler) } return r } - 第二步:修改测试代码中的路由初始化逻辑,将原来的
router := gin.Default()替换为调用上述路由初始化方法,获取已注册所有接口的路由实例:// 替换原有空白路由初始化代码 router := SetupRouter() - 第三步(可选优化):你的测试代码当前仅打印响应码和预期返回体,建议补充断言逻辑完成完整的测试校验,示例如下:
// 校验响应码符合预期 assert.Equal(suite.T(), http.StatusOK, recorder.Code) // 校验返回体内容符合预期 assert.JSONEq(suite.T(), string(respBody), recorder.Body.String())
内容的提问来源于stack exchange,提问作者ZPascal
相关产品推荐
相关产品推荐

