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
DDDoriginal
2024-12-22 01:50:24244parcourir

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

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

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

c.Set("svc_context_key", &mockSvc{})

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!

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