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
Libérer: 2024-12-07 16:32:14
original
908 Les gens l'ont consulté

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),
}
Copier après la connexion
  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))
}
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal