Comment définir Mock gin.Context pour BindJSON
Lorsque vous travaillez avec le framework Go et Gin, configuration d'un mock gin.Context pour les tests peuvent être difficiles, surtout lorsqu'il s'agit d'utiliser BindJSON.
Le Problème :
Vous souhaitez tester la logique d'insertion MySQL impliquant BindJSON, mais vous ne parvenez pas à configurer avec succès le gin fictif.Contexte requis pour le test.
La solution :
Pour configurer correctement un mock gin.Contexte, suivez ces étapes :
w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = &http.Request{ Header: make(http.Header), }
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)) }
Vous pouvez désormais fournir à l'argument de contenu interface{} des données qui peuvent être rassemblées en JSON, généralement une structure avec les balises JSON appropriées ou une map[string]interface{} .
Exemple d'utilisation :
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) }
En créant un gin simulé.Contexte et en injectant des données JSON dans la requête, vous pouvez tester efficacement votre logique BindJSON de manière isolée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!