Maison >développement back-end >Golang >Comment se moquer de gin.Context avec BindJSON pour les tests Go ?

Comment se moquer de gin.Context avec BindJSON pour les tests Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-07 16:32:14917parcourir

How to Mock gin.Context with BindJSON for Go Testing?

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 :

  1. Instanciez un test gin.Context et assurez-vous que son http.Request est non nul :
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
c.Request = &http.Request{
    Header: make(http.Header),
}
  1. Mock un corps POST JSON utilisant le MockJsonPost function :
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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn