Gin の HTTP リクエストに関連する操作をテストするには、*http を初期化します。 .リクエストして、Gin コンテキストに設定します。特に c.BindQuery をテストするには、リクエストの URL と URL.RawQuery を初期化します。
import ( "net/http/httptest" "github.com/gin-gonic/gin" ) func mockGin() (*gin.Context, *httptest.ResponseRecorder) { w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) // Test request req := &http.Request{ URL: &url.URL{}, Header: make(http.Header), } // Test query testQuery := weldprogs.QueryParam{/* init fields */} q := req.URL.Query() for _, s := range testQuery.Basematgroup_id { q.Add("basematgroup_id", s) } // Set URL.RawQuery req.URL.RawQuery = q.Encode() // Set request to Gin context c.Request = req return c, w }
JSON バインディングのモックに関するガイダンスについては、このリソースを参照してください。
次のようなサービスservices.WeldprogService.GetmaterialByFilter(&queryParam) はそのままではテストできません。テスト可能にするには:
インターフェイスとコンテキストの値アプローチ:
type services interface { GetMaterialByFilter(*weldprogs.QueryParam) (*weldprogs.MaterialByFilter, error) } func mockWeldprogService(service services) { return func(c *gin.Context) { c.Set("svc_context_key", service) } } func TestGetMaterialByFilter(t *testing.T) { w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Use(mockWeldprogService(&mockSvc{})) GetMaterialByFilter(c) // ... }
以上がモックを使用してジン ハンドラー関数を効果的に単体テストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。