Maison > développement back-end > Golang > Comment se moquer efficacement du BindJSON de gin.Context dans les tests unitaires Go ?

Comment se moquer efficacement du BindJSON de gin.Context dans les tests unitaires Go ?

DDD
Libérer: 2024-12-11 02:38:12
original
958 Les gens l'ont consulté

How to Effectively Mock gin.Context's BindJSON in Go Unit Tests?

Comment se moquer de Gin.Context pour BindJSON

Lors du test du code Go qui utilise le framework Gin et nécessite de se moquer de gin.Context pour BindJSON fonctionnalité, il est essentiel de s'assurer que :

  1. Créer un Contexte de test Gin : Instanciez un gin.Context de test et définissez son *http.Request sur une valeur non nulle.
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)

c.Request = &http.Request{
    Header: make(http.Header),
}
Copier après la connexion
  1. Mockez le corps POST JSON : Utilisez la fonction MockJsonPost pour imiter une requête POST avec un JSON body.
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

L'argument de contenu peut être n'importe quelle structure de données ou carte marshalable.

Exemple :

func TestPostImageToDBDao(t *testing.T) {
    w := httptest.NewRecorder()
    ctx, _ := gin.CreateTestContext(w) 

    ctx.Request = &http.Request{
        Header: make(http.Header),
    }

    MockJsonPost(ctx, map[string]interface{}{
        "articleUUID": "bea1b24d-0627-4ea0-aa2b-8af4c6c2a41c",
        "imageNames":  "b8119536-fad5-4ffa-ab71-2f96cca19697",
    })

    PostImageToDBDao(ctx)
    assert.EqualValues(t, http.StatusOK, w.Code)
}
Copier après la connexion

Ressources connexes :

  • [Comment tester unitairement un Go Gin fonction de gestionnaire ?](https://stackoverflow.com/questions/52336566/how-to-unit-test-a-go-gin-handler-function)

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal