首頁  >  文章  >  後端開發  >  如何在 Go Http.Request.FormFile 測試中模擬檔案上傳?

如何在 Go Http.Request.FormFile 測試中模擬檔案上傳?

Patricia Arquette
Patricia Arquette原創
2024-11-03 08:21:02999瀏覽

How to Simulate File Upload in Go Http.Request.FormFile Tests?

測試 Go Http.Request.FormFile

測試需要多部分錶單資料的端點需要上傳檔案。這可以透過使用 httptest 庫產生帶有表單檔案的 post 請求來實現。

我們可以利用 mime/multipart 套件來建立表單文件,而不是模擬完整的 FormFile 結構。 CreateFormFile 函數產生一個指定欄位名稱和檔案名稱的多部分欄位頭。

透過將 CreateFormFile 建立的 io.Writer 傳遞給 httptest.NewRequest,我們可以用表單檔案模擬 post 請求。

以下是如何實現的範例:

<code class="go">func TestUploadImage(t *testing.T) {
    // Set up an io.Pipe to avoid buffering
    pr, pw := io.Pipe()
    writer := multipart.NewWriter(pw)

    go func() {
        defer writer.Close()
        part, err := writer.CreateFormFile("fileupload", "someimg.png")
        if err != nil {
            t.Error(err)
        }
        img := createImage()
        err = png.Encode(part, img)
        if err != nil {
            t.Error(err)
        }
    }()

    request := httptest.NewRequest("POST", "/", pr)
    request.Header.Add("Content-Type", writer.FormDataContentType())

    response := httptest.NewRecorder()
    handler := UploadFileHandler()
    handler.ServeHTTP(response, request)

    if response.Code != 200 {
        t.Errorf("Expected %s, received %d", 200, response.Code)
    }
    if _, err := os.Stat("./uploads/someimg.png"); os.IsNotExist(err) {
        t.Error("Expected file ./uploads/someimg.png' to exist")
    }
}</code>

此函數使用影像包動態建立影像,並使用 png.Encode 將其直接寫入多部分 Writer。這模擬了圖像檔案的上傳,而不需要實際的檔案 I/O。

以上是如何在 Go Http.Request.FormFile 測試中模擬檔案上傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn