Heim > Backend-Entwicklung > Golang > Wie kann man Gin-Handler-Funktionen mit Abfrageparametern effektiv einem Unit-Test unterziehen?

Wie kann man Gin-Handler-Funktionen mit Abfrageparametern effektiv einem Unit-Test unterziehen?

DDD
Freigeben: 2024-12-22 01:50:24
Original
214 Leute haben es durchsucht

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

Testen von Gin-Handler-Funktionen mit Abfrageparametern

Fehleranalyse

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.

Lösung: Mocking Requests und Bindung

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()
}
Nach dem Login kopieren

Serviceaufrufe testen

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)
}
Nach dem Login kopieren

Setzen Sie im Komponententest einen Scheindienst in den Kontext ein:

c.Set("svc_context_key", &mockSvc{})
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage