Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mengejek gin.Konteks dengan BindJSON untuk Ujian Pergi?

Bagaimana untuk mengejek gin.Konteks dengan BindJSON untuk Ujian Pergi?

Patricia Arquette
Patricia Arquetteasal
2024-12-07 16:32:14939semak imbas

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

Cara Menetapkan Mock gin.Context for BindJSON

Apabila bekerja dengan rangka kerja Go dan Gin, sediakan mock gin.Konteks untuk ujian tujuan boleh mencabar, terutamanya apabila ia melibatkan penggunaan BindJSON.

The Masalah:

Anda berhasrat untuk menguji logik sisipan MySQL yang melibatkan BindJSON, tetapi anda tidak boleh berjaya menyediakan gin mock.Konteks yang diperlukan untuk ujian.

Penyelesaian :

Untuk menyediakan gin palsu dengan betul.Konteks, ikuti ini langkah:

  1. Segera ujian gin.Konteks dan pastikan http.Permintaannya bukan nol:
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
c.Request = &http.Request{
    Header: make(http.Header),
}
  1. Mock badan POST JSON menggunakan MockJsonPost fungsi:
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))
}

Anda kini boleh membekalkan antara muka{} hujah kandungan dengan data yang boleh disusun ke dalam JSON, biasanya struct dengan tag JSON yang sesuai atau peta[rentetan]antara muka{} .

Contoh Penggunaan:

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)
}

Dengan mencipta olok-olok gin.Konteks dan menyuntik data JSON ke dalam permintaan, anda boleh menguji logik BindJSON anda secara berasingan.

Atas ialah kandungan terperinci Bagaimana untuk mengejek gin.Konteks dengan BindJSON untuk Ujian Pergi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn