首頁 > 後端開發 > Golang > 如何在 Go 單元測試中有效模擬 gin.Context 的 BindJSON?

如何在 Go 單元測試中有效模擬 gin.Context 的 BindJSON?

DDD
發布: 2024-12-11 02:38:12
原創
966 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板