Heim >Backend-Entwicklung >Golang >Wie verspotte ich gin.Context mit BindJSON für Go-Tests?
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:
w := httptest.NewRecorder() c, _ := gin.CreateTestContext(w) c.Request = &http.Request{ Header: make(http.Header), }
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!