Maison > développement back-end > Golang > Comment tester efficacement les fonctions du gestionnaire de gin avec des simulations ?

Comment tester efficacement les fonctions du gestionnaire de gin avec des simulations ?

DDD
Libérer: 2024-12-17 20:31:12
original
812 Les gens l'ont consulté

How to Effectively Unit Test Gin Handler Functions with Mocks?

Mocks pour tester unitairement les fonctions du gestionnaire Gin

Test de la fonctionnalité c.BindQuery

Pour tester les opérations impliquant la requête HTTP dans Gin, initialisez un *http .Request et définissez-le sur le contexte Gin. Spécifiquement pour tester c.BindQuery, initialisez l'URL et l'URL de la requête.RawQuery :

import (
    "net/http/httptest"

    "github.com/gin-gonic/gin"
)

func mockGin() (*gin.Context, *httptest.ResponseRecorder) {
    w := httptest.NewRecorder()
    c, _ := gin.CreateTestContext(w)

    // Test request
    req := &http.Request{
        URL: &url.URL{},
        Header: make(http.Header),
    }

    // Test query
    testQuery := weldprogs.QueryParam{/* init fields */}

    q := req.URL.Query()
    for _, s := range testQuery.Basematgroup_id {
        q.Add("basematgroup_id", s)
    }

    // Set URL.RawQuery
    req.URL.RawQuery = q.Encode()

    // Set request to Gin context
    c.Request = req

    return c, w
}
Copier après la connexion

Mocking JSON Binding

Référez-vous à cette ressource pour obtenir des conseils sur la simulation de liaison JSON.

Services de tests

Des services comme services.WeldprogService.GetMaterialByFilter(&queryParam) ne peut pas être testé tel quel. Pour les rendre testables :

  • Convertissez-les en interfaces.
  • Injectez-les en tant que dépendances dans le gestionnaire.
  • Définissez-les comme valeurs de contexte Gin.

Approche de valeur d'interface et de contexte :

type services interface {
    GetMaterialByFilter(*weldprogs.QueryParam) (*weldprogs.MaterialByFilter, error)
}

func mockWeldprogService(service services) {
    return func(c *gin.Context) {
        c.Set("svc_context_key", service)
    }
}

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

    c.Use(mockWeldprogService(&mockSvc{}))

    GetMaterialByFilter(c)

    // ...
}
Copier après la connexion

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