首页 > 后端开发 > Golang > 如何在 Go 单元测试中有效模拟 gin.Context 的 BindJSON?

如何在 Go 单元测试中有效模拟 gin.Context 的 BindJSON?

DDD
发布: 2024-12-11 02:38:12
原创
983 人浏览过

How to Effectively Mock gin.Context's BindJSON in Go Unit Tests?

如何模拟 Gin.Context for BindJSON

测试使用 Gin 框架并需要模拟 gin.Context for BindJSON 的 Go 代码时功能,必须确保

  1. 创建一个 Gin 测试上下文: 实例化一个测试 gin.Context 并将其 *http.Request 设置为非零值。
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)

c.Request = &http.Request{
    Header: make(http.Header),
}
登录后复制
  1. 模拟 POST JSON 正文: 利用MockJsonPost 函数用 JSON 正文模拟 POST 请求。
func MockJsonPost(c *gin.Context, content interface{}) {
    c.Request.Method = "POST"
    c.Request.Header.Set("Content-Type", "application/json")

    jsonbytes, err := json.Marshal(content)
    if err != nil {
        panic(err)
    }

    c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonbytes))
}
登录后复制

内容参数可以是任何可编组的数据结构或映射。

示例:

func TestPostImageToDBDao(t *testing.T) {
    w := httptest.NewRecorder()
    ctx, _ := gin.CreateTestContext(w) 

    ctx.Request = &http.Request{
        Header: make(http.Header),
    }

    MockJsonPost(ctx, map[string]interface{}{
        "articleUUID": "bea1b24d-0627-4ea0-aa2b-8af4c6c2a41c",
        "imageNames":  "b8119536-fad5-4ffa-ab71-2f96cca19697",
    })

    PostImageToDBDao(ctx)
    assert.EqualValues(t, http.StatusOK, w.Code)
}
登录后复制

相关资源:

  • [如何对 Go Gin 处理函数进行单元测试?](https://stackoverflow.com/questions/52336566/how-to-unit-test-a-go -gin-handler-function)

以上是如何在 Go 单元测试中有效模拟 gin.Context 的 BindJSON?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板