クエリ パラメーター、無効なメモリ アドレス、または nil をバインドする Jin ハンドラー関数の単体テスト時不適切に初期化された HTTP リクエストが原因でポインタ逆参照エラーが発生します。
c.BindQuery() を使用してクエリ パラメータ バインディングをモックするには、適切な URL と URL.RawQuery を使用して HTTP リクエストを初期化します。次のヘルパー関数を使用します。
func mockGin() (*gin.Context, *httptest.ResponseRecorder) { req := &http.Request{ URL: &url.URL{}, Header: make(http.Header), } q := req.URL.Query() // Add query parameters to the request // ... req.URL.RawQuery = q.Encode() c, _ := gin.CreateTestContext(httptest.NewRecorder()) c.Request = req return c, httptest.NewRecorder() }
サービス呼び出しをテストするには、サービスをインターフェイスにしてハンドラーに挿入します。サービスを Gin コンテキスト値として設定して、単体テストでモックできるようにすることができます。例:
func GetMaterialByFilter(c *gin.Context) { weldprogService := mustGetService(c) // ... Call the service method ... } func mustGetService(c *gin.Context) services.WeldprogService { svc, exists := c.Get("svc_context_key") if !exists { panic("service was not set") } return svc.(services.WeldprogService) }
単体テストで、コンテキストにモック サービスを設定します:
c.Set("svc_context_key", &mockSvc{})
ここで、mockSvc はサービス インターフェイスを実装します。
以上がクエリ パラメーターを使用して、Gin ハンドラー関数を効果的に単体テストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。