ホームページ >バックエンド開発 >Golang >Go テストのために BindJSON を使用して gin.Context をモックする方法は?

Go テストのために BindJSON を使用して gin.Context をモックする方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-07 16:32:14917ブラウズ

How to Mock gin.Context with BindJSON for Go Testing?

BindJSON のモック gin.Context を設定する方法

Go および Gin フレームワークを使用する場合、テスト用にモック gin.Context をセットアップする特に BindJSON の使用が関係する場合、目的は困難になる可能性があります。

問題:

BindJSON を含む MySQL 挿入ロジックをテストすることを目的としていますが、テストに必要なモック gin.Context を正常にセットアップできません。

解決策:

モック gin.Context を適切に設定するには、次に従います。手順:

  1. テスト gin.Context をインスタンス化し、その http.Request が nil でないことを確認します:
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
c.Request = &http.Request{
    Header: make(http.Header),
}
  1. Mock MockJsonPost を使用した POST JSON 本文function:
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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。