BindJSON のモック gin.Context を設定する方法
Go および Gin フレームワークを使用する場合、テスト用にモック gin.Context をセットアップする特に BindJSON の使用が関係する場合、目的は困難になる可能性があります。
問題:
BindJSON を含む MySQL 挿入ロジックをテストすることを目的としていますが、テストに必要なモック gin.Context を正常にセットアップできません。
解決策:
モック gin.Context を適切に設定するには、次に従います。手順:
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)) }
JSON にマーシャリングできるデータを、interface{} content 引数に指定できるようになりました。通常は、適切な 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 ロジックを分離して効果的にテストできます。
以上がGo テストのために BindJSON を使用して gin.Context をモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。