Rumah >pembangunan bahagian belakang >Golang >Bagaimana Mengejek BindJSON gin.Context dalam Ujian Unit Go dengan Berkesan?

Bagaimana Mengejek BindJSON gin.Context dalam Ujian Unit Go dengan Berkesan?

DDD
DDDasal
2024-12-11 02:38:12929semak imbas

How to Effectively Mock gin.Context's BindJSON in Go Unit Tests?

Cara Mengejek Gin.Context for BindJSON

Apabila menguji kod Go yang menggunakan rangka kerja Gin dan memerlukan mengejek gin.Konteks untuk BindJSON kefungsian, adalah penting untuk memastikan bahawa:

  1. Mencipta Konteks Ujian Gin: Buat seketika gin ujian.Konteks dan tetapkan *http.Minta kepada nilai bukan nol.
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)

c.Request = &http.Request{
    Header: make(http.Header),
}
  1. Ejek Badan POST JSON : Gunakan fungsi MockJsonPost untuk meniru permintaan POST dengan JSON body.
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))
}

Argumen kandungan boleh berupa sebarang struktur data atau peta yang boleh dimarshal.

Contoh:

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

    ctx.Request = &http.Request{
        Header: make(http.Header),
    }

    MockJsonPost(ctx, map[string]interface{}{
        "articleUUID": "bea1b24d-0627-4ea0-aa2b-8af4c6c2a41c",
        "imageNames":  "b8119536-fad5-4ffa-ab71-2f96cca19697",
    })

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

Sumber Berkaitan:

  • [Cara menguji unit Go Fungsi pengendali gin?](https://stackoverflow.com/questions/52336566/how-to-unit-test-a-go-gin-handler-function)

Atas ialah kandungan terperinci Bagaimana Mengejek BindJSON gin.Context dalam Ujian Unit Go dengan Berkesan?. 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