Heim >Backend-Entwicklung >Golang >Wie verspotte ich gin.Context mit BindJSON für Go-Tests?

Wie verspotte ich gin.Context mit BindJSON für Go-Tests?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-07 16:32:141005Durchsuche

How to Mock gin.Context with BindJSON for Go Testing?

So legen Sie Mock gin.Context für BindJSON fest

Wenn Sie mit dem Go- und Gin-Framework arbeiten, richten Sie einen Mock gin.Context zum Testen ein Zwecke können eine Herausforderung sein, insbesondere wenn es um die Verwendung von BindJSON geht.

Die Problem:

Sie möchten die MySQL-Einfügelogik mit BindJSON testen, aber Sie können den für den Test erforderlichen Schein-gin.Context nicht erfolgreich einrichten.

Die Lösung :

Um einen Mock-Gin.Context richtig einzurichten, befolgen Sie diese Schritte:

  1. Instanziieren Sie einen Test gin.Context und stellen Sie sicher, dass sein http.Request ungleich Null ist:
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
c.Request = &http.Request{
    Header: make(http.Header),
}
  1. Mock ein POST-JSON-Body mit der MockJsonPost-Funktion:
func MockJsonPost(c *gin.Context, content interface{}) {
    c.Request.Method = "POST"
    c.Request.Header.Set("Content-Type", "application/json")

    jsonbytes, err := json.Marshal(content)
    if err != nil {
        panic(err)
    }
    c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonbytes))
}

Sie kann jetzt das Content-Argument interface{} mit Daten versorgen, die in JSON gemarshallt werden können, normalerweise eine Struktur mit den entsprechenden JSON-Tags oder eine Map[string]interface{}.

Beispielverwendung:

func TestMyHandler(t *testing.T) {
    w := httptest.NewRecorder()
    ctx, _ := gin.CreateTestContext(w)
    ctx.Request = &http.Request{
        Header: make(http.Header),
    }

    MockJsonPost(ctx, map[string]interface{}{"foo": "bar"})

    MyHandler(ctx)
    assert.EqualValues(t, http.StatusOK, w.Code)
}

Indem Sie einen simulierten gin.Context erstellen und JSON-Daten in die Anfrage einfügen, können Sie Ihre BindJSON-Logik effektiv testen Isolation.

Das obige ist der detaillierte Inhalt vonWie verspotte ich gin.Context mit BindJSON für Go-Tests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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