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