如何為BindJSON 設定Mock gin.Context
使用Go 和Gin 框架時,設定一個模擬gin.Context 進行測試目的可能具有挑戰性,尤其是當涉及使用BindJSON 時。
問題:
您的目標是測試涉及 BindJSON 的 MySQL 插入邏輯,但無法成功設定模擬 gin。測試所需的上下文。
解決方案:
要正確設定模擬琴酒。上下文,請遵循以下步驟步驟:
w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = &http.Request{ Header: make(http.Header), }
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)) }
您現在可以向 interface{} 內容參數提供可編組為 JSON 的數據,通常是帶有適當 JSON 標籤的結構體或 map[string]interface{} .
用法範例:
func TestMyHandler(t *testing.T) { w := httptest.NewRecorder() ctx, _ := gin.CreateTestContext(w) ctx.Request = &http.Request{ Header: make(http.Header), } MockJsonPost(ctx, map[string]interface{}{"foo": "bar"}) MyHandler(ctx) assert.EqualValues(t, http.StatusOK, w.Code) }
透過建立模擬gin.Context 並將JSON 資料注入到請求中,您可以有效地隔離測試您的BindJSON 邏輯。
以上是如何使用 BindJSON 模擬 gin.Context 進行 Go 測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!