Go テスト用に gin.Context の BindJSON を効果的にモックする方法は?
Go で BindJSON のモック gin.Context を設定する
はじめに
HTTP リクエスト中に JSON データを構造体にバインドすることは、Web アプリケーションの一般的なタスクです。リクエスト コンテキストのモック化が必要なテスト フレームワークを利用する場合、困難になる可能性があります。具体的には、gin.Context をモックすると、その BindJSON メソッドに依存する関数をテストしようとするときに困難が生じます。この記事では、この問題に対する包括的な解決策を提供します。
gin.Context のモック
まず、テスト gin.Context をインスタンス化し、その http.Request を非 null に設定することが重要です。
w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = &http.Request{ Header: make(http.Header), }
POST JSON ボディのモック
次に、POST JSON をモックできます。次の関数を使用して本文を作成します。
func MockJsonPost(c *gin.Context /* the test context */, content interface{}) { c.Request.Method = "POST" // or PUT c.Request.Header.Set("Content-Type", "application/json") jsonbytes, err := json.Marshal(content) if err != nil { panic(err) } // the request body must be an io.ReadCloser // the bytes buffer though doesn't implement io.Closer, // so you wrap it in a no-op closer c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonbytes)) }
この関数は、json.Marshal() を使用して JSON にマーシャリングできるコンテンツ インターフェース パラメータを受け入れます。{}これは、適切な JSON タグを持つ構造体またはマップ[文字列]インターフェイス{}です。
使用例
テストで MockJsonPost 関数を使用する方法は次のとおりです。
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 ハンドラーのテストの詳細については、以下を参照してください。リソース:
- Go Jin ハンドラー関数を単体テストする方法?
以上がGo テスト用に gin.Context の BindJSON を効果的にモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?
