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

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

Patricia Arquette
Libérer: 2024-12-06 19:22:12
original
299 Les gens l'ont consulté

How to Effectively Mock gin.Context's BindJSON for Go Testing?

Définition de Mock gin.Context pour BindJSON dans Go

Introduction

La liaison des données JSON à une structure lors des requêtes HTTP est une tâche courante dans les applications Web . Cela peut devenir difficile lors de l'utilisation d'un cadre de test qui nécessite de se moquer du contexte de la demande. Plus précisément, se moquer de gin.Context pose des difficultés lorsque l'on tente de tester des fonctions qui s'appuient sur sa méthode BindJSON. Cet article fournit une solution complète à ce problème.

Mocking gin.Context

Tout d'abord, il est crucial d'instancier un gin.Context de test et de définir sa http.Request comme non nulle :

    w := httptest.NewRecorder()
    c, _ := gin.CreateTestContext(w) 

    c.Request = &http.Request{
        Header: make(http.Header),
    }
Copier après la connexion

Se moquer du corps POST JSON

Ensuite, nous pouvons nous moquer d'un corps POST JSON en utilisant la fonction suivante :

func MockJsonPost(c *gin.Context /* the test context */, content interface{}) {
    c.Request.Method = "POST" // or PUT
    c.Request.Header.Set("Content-Type", "application/json")

    jsonbytes, err := json.Marshal(content)
    if err != nil {
        panic(err)
    }
    
    // the request body must be an io.ReadCloser
    // the bytes buffer though doesn't implement io.Closer,
    // so you wrap it in a no-op closer
    c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonbytes))
}
Copier après la connexion

Cette fonction accepte un paramètre content interface{} qui peut être marshallé en JSON à l'aide de json.Marshal(). Il peut s'agir d'une structure avec des balises JSON appropriées ou d'une interface map[string]{}.

Exemple d'utilisation

Voici comment utiliser la fonction MockJsonPost dans un test :

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

Notes supplémentaires

Pour plus d'informations sur les tests des gestionnaires Gin, reportez-vous à ce qui suit ressource :

  • Comment tester unitairement une fonction de gestionnaire Go Gin ?

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