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
DDDoriginal
2024-12-11 02:38:12983parcourir

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),
}
  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))
}

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)
}

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!

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