Heim >Backend-Entwicklung >Golang >Wie simuliere ich das Hochladen von Dateien in Go Http.Request.FormFile-Tests?

Wie simuliere ich das Hochladen von Dateien in Go Http.Request.FormFile-Tests?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 08:21:021051Durchsuche

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

Testen von Go Http.Request.FormFile

Das Testen von Endpunkten, die mehrteilige Formulardaten erwarten, erfordert die Simulation eines Datei-Uploads. Dies kann erreicht werden, indem eine Post-Anfrage mit einer Formulardatei mithilfe der httptest-Bibliothek generiert wird.

Anstatt die gesamte FormFile-Struktur zu verspotten, können wir das Paket mime/multipart verwenden, um eine Formulardatei zu erstellen. Die CreateFormFile-Funktion generiert einen mehrteiligen Feldheader mit dem angegebenen Feldnamen und Dateinamen.

Indem wir den von CreateFormFile erstellten io.Writer an httptest.NewRequest übergeben, können wir eine Post-Anfrage mit einer Formulardatei simulieren.

Hier ist ein Beispiel, wie dies implementiert werden kann:

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

Diese Funktion erstellt mithilfe des Bildpakets dynamisch ein Bild und schreibt es mithilfe von png.Encode direkt in den Multipart Writer. Dadurch wird das Hochladen einer Bilddatei simuliert, ohne dass eine tatsächliche Datei-E/A erforderlich ist.

Das obige ist der detaillierte Inhalt vonWie simuliere ich das Hochladen von Dateien in Go Http.Request.FormFile-Tests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn