Go テストの世界では、要求コンテキストをモックする機能は、負荷の高いコントローラーや関数をテストするときに非常に重要です。ジンのコンテキスト機能に依存します。一般的なシナリオの 1 つは、JSON データの構造体へのバインディングをモックする必要があることです。
データが JSON 形式の HTTP リクエスト本文から取得されるデータベース挿入ロジックを想像してください。コントローラー関数は、Go の人気のある Web フレームワークである Gin を利用してリクエストを処理します。ただし、このロジックの単体テストには課題が生じます。Gin コンテキストをモックし、バインドに必要な JSON データを設定する方法?
テスト コンテキストの作成: まず、テスト gin.Context をインスタンス化し、そのコンテキストを設定します。 http.Request to non-nil:
w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = &http.Request{ Header: make(http.Header), }
POST JSON Body をモックする: 次に、目的の JSON データを使用して POST リクエスト本文をモックします。このユーティリティ関数の使用:
func MockJsonPost(c *gin.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) } c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonbytes)) }
このソリューションを特定のテスト シナリオに適用するには、次の手順に従います。
必要なモジュールをインポートします: 次のモジュールをテストファイル:
import "github.com/gin-gonic/gin" import "net/http" import "net/http/httptest"
モックされたコンテキストの生成: Gin テスト コンテキストを作成し、その Request.Body をモックされた JSON POST データで初期化します:
w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = &http.Request{ Header: make(http.Header), } MockJsonPost(c, map[string]interface{}{"foo": "bar"})
コントローラーを呼び出す関数: モックされたコンテキストを使用してコントローラー関数を呼び出します:
controllerFunction(c)
これらの手順に従うことで、BindJSON 操作用の Gin コンテキストを効果的にモックできます。単体テスト内でコードの機能を個別に徹底的にテストできます。
以上がGo単体テストでBindJSONのgin.Contextをモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。