Heim > Backend-Entwicklung > Golang > Wie kann man Gin-Handler-Funktionen effektiv mit Mocks testen?

Wie kann man Gin-Handler-Funktionen effektiv mit Mocks testen?

DDD
Freigeben: 2024-12-17 20:31:12
Original
807 Leute haben es durchsucht

How to Effectively Unit Test Gin Handler Functions with Mocks?

Mocks zum Unit-Test von Gin-Handler-Funktionen

Testen der c.BindQuery-Funktionalität

Um Vorgänge mit der HTTP-Anfrage in Gin zu testen, initialisieren Sie ein *http .Request und stellen Sie es auf den Gin-Kontext ein. Initialisieren Sie speziell zum Testen von c.BindQuery die URL und URL der Anfrage. RawQuery:

import (
    "net/http/httptest"

    "github.com/gin-gonic/gin"
)

func mockGin() (*gin.Context, *httptest.ResponseRecorder) {
    w := httptest.NewRecorder()
    c, _ := gin.CreateTestContext(w)

    // Test request
    req := &http.Request{
        URL: &url.URL{},
        Header: make(http.Header),
    }

    // Test query
    testQuery := weldprogs.QueryParam{/* init fields */}

    q := req.URL.Query()
    for _, s := range testQuery.Basematgroup_id {
        q.Add("basematgroup_id", s)
    }

    // Set URL.RawQuery
    req.URL.RawQuery = q.Encode()

    // Set request to Gin context
    c.Request = req

    return c, w
}
Nach dem Login kopieren

JSON-Bindung verspotten

Anleitungen zum Verspotten der JSON-Bindung finden Sie in dieser Ressource.

Testdienstleistungen

Dienstleistungen wie Services.WeldprogService.GetMaterialByFilter(&queryParam) kann nicht so wie es ist getestet werden. Um sie testbar zu machen:

  • Konvertieren Sie sie in Schnittstellen.
  • Fügen Sie sie als Abhängigkeiten in den Handler ein.
  • Legen Sie sie als Gin-Kontextwerte fest.

Schnittstellen- und Kontextwertansatz:

type services interface {
    GetMaterialByFilter(*weldprogs.QueryParam) (*weldprogs.MaterialByFilter, error)
}

func mockWeldprogService(service services) {
    return func(c *gin.Context) {
        c.Set("svc_context_key", service)
    }
}

func TestGetMaterialByFilter(t *testing.T) {
    w := httptest.NewRecorder()
    c, _ := gin.CreateTestContext(w)

    c.Use(mockWeldprogService(&mockSvc{}))

    GetMaterialByFilter(c)

    // ...
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann man Gin-Handler-Funktionen effektiv mit Mocks testen?. 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