Maison > développement back-end > Golang > Comment tester efficacement les fonctions du gestionnaire Gin avec des paramètres de requête ?

Comment tester efficacement les fonctions du gestionnaire Gin avec des paramètres de requête ?

DDD
Libérer: 2024-12-22 01:50:24
original
214 Les gens l'ont consulté

How to Effectively Unit Test Gin Handler Functions with Query Parameters?

Test des fonctions du gestionnaire Gin avec des paramètres de requête

Analyse des erreurs

Lors du test unitaire des fonctions du gestionnaire Gin qui lient des paramètres de requête, une adresse mémoire non valide ou nulle Une erreur de déréférencement de pointeur se produit en raison d'une requête HTTP mal initialisée.

Solution : requêtes moqueuses et Binding

Pour simuler la liaison des paramètres de requête à l'aide de c.BindQuery(), initialisez la requête HTTP avec l'URL et l'URL.RawQuery appropriées. Utilisez la fonction d'assistance suivante :

func mockGin() (*gin.Context, *httptest.ResponseRecorder) {
    req := &http.Request{
        URL:    &url.URL{},
        Header: make(http.Header),
    }

    q := req.URL.Query()
    // Add query parameters to the request
    // ...

    req.URL.RawQuery = q.Encode()

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

    return c, httptest.NewRecorder()
}
Copier après la connexion

Test des appels de service

Pour tester les appels de service, faites du service une interface et injectez-le dans le gestionnaire. Vous pouvez définir le service comme valeur de contexte Gin, vous permettant de vous en moquer dans les tests unitaires. Par exemple :

func GetMaterialByFilter(c *gin.Context) {
    weldprogService := mustGetService(c)
    // ... Call the service method ...
}

func mustGetService(c *gin.Context) services.WeldprogService {
    svc, exists := c.Get("svc_context_key")
    if !exists {
        panic("service was not set")
    }
    return svc.(services.WeldprogService)
}
Copier après la connexion

Dans le test unitaire, définissez un service fictif dans le contexte :

c.Set("svc_context_key", &mockSvc{})
Copier après la connexion

où mockSvc implémente l'interface de service.

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