Beim Komponententest von Gin-Handler-Funktionen, die Abfrageparameter binden, eine ungültige Speicheradresse oder Null Ein Zeiger-Dereferenzierungsfehler tritt aufgrund einer falsch initialisierten HTTP-Anfrage auf.
Um die Abfrageparameterbindung mit c.BindQuery() zu simulieren, initialisieren Sie die HTTP-Anfrage mit der richtigen URL und URL.RawQuery. Verwenden Sie die folgende Hilfsfunktion:
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() }
Um Serviceaufrufe zu testen, machen Sie den Dienst zu einer Schnittstelle und injizieren Sie ihn in den Handler. Sie können den Dienst als Gin-Kontextwert festlegen, sodass Sie ihn in Komponententests verspotten können. Zum Beispiel:
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) }
Setzen Sie im Komponententest einen Scheindienst in den Kontext ein:
c.Set("svc_context_key", &mockSvc{})
wobei mockSvc die Dienstschnittstelle implementiert.
Das obige ist der detaillierte Inhalt vonWie kann man Gin-Handler-Funktionen mit Abfrageparametern effektiv einem Unit-Test unterziehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!