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

如何在Go測試中模擬檔案上傳?

Patricia Arquette
Patricia Arquette原創
2024-11-02 01:48:02948瀏覽

How to Simulate File Uploads in Go Tests?

在 Go 中測試檔案上傳

測試處理檔案上傳的端點時,需要設定 Request.FormFile 欄位。不幸的是,簡單地模擬完整的 FormFile 結構是一種過於複雜的方法。相反,可以利用 mime/multipart 套件來建立必要的 FormFile 實例。

使用 CreateFormFile

CreateFormFile 函數是 Writer 類型的成員,提供了一種產生具有特定欄位名稱和檔案名稱的表單資料標頭的便捷方法。然後可以將產生的 io.Writer 傳遞給 httptest.NewRequest 函數。

使用管道的範例

一種方法是將 FormFile 寫入 io.ReaderWriter 緩衝區或使用 io.Pipe。以下範例示範了後一種方法:

<code class="go">// Create a pipe to prevent buffering.
pr, pw := io.Pipe()

// Transform data to multipart form data and write it to the pipe.
writer := multipart.NewWriter(pw)
defer writer.Close()

go func() {
    // Create the "fileupload" form data field.
    part, err := writer.CreateFormFile("fileupload", "someimg.png")
    if err != nil {
        t.Error(err)
    }

    // Generate the image bytes.
    img := createImage()

    // Encode the image to the form data field writer.
    err = png.Encode(part, img)
    if err != nil {
        t.Error(err)
    }
}

// Read from the pipe into a new httptest.Request.
request := httptest.NewRequest("POST", "/", pr)
request.Header.Add("Content-Type", writer.FormDataContentType())</code>

處理請求

使用請求中的FormFile 數據,您可以像平常一樣在測試的端點中處理它。範例函數演示了在上傳目錄中建立文件。

附加說明

此方法可讓您動態建立表單數據,並將其傳遞給測試框架,而無需使用臨時檔案。您可以類似地使用encoding/csv 產生CSV 文件,而無需從檔案系統讀取。

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

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