Wie simuliert man Datei-Uploads in Go-Tests?

Patricia Arquette
Freigeben: 2024-11-02 01:48:02
Original
948 Leute haben es durchsucht

How to Simulate File Uploads in Go Tests?

Testen von Datei-Uploads in Go

Beim Testen von Endpunkten, die Datei-Uploads verarbeiten, besteht die Notwendigkeit, das Feld „Request.FormFile“ festzulegen. Leider ist es ein übermäßig komplexer Ansatz, einfach die gesamte FormFile-Struktur zu verspotten. Stattdessen ist es möglich, das Mime-/Multipart-Paket zu nutzen, um die erforderliche FormFile-Instanz zu erstellen.

Verwenden von CreateFormFile

Die CreateFormFile-Funktion, ein Mitglied des Writer-Typs, bietet eine praktische Möglichkeit, einen Formulardaten-Header mit einem bestimmten Feldnamen und Dateinamen zu generieren. Der resultierende io.Writer kann dann an die Funktion httptest.NewRequest übergeben werden.

Beispiel mit Pipes

Ein Ansatz besteht darin, die FormFile in einen io.ReaderWriter-Puffer zu schreiben oder verwenden Sie eine io.Pipe. Das folgende Beispiel demonstriert die letztere Methode:

<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>
Nach dem Login kopieren

Bearbeitung der Anfrage

Mit den FormFile-Daten in der Anfrage können Sie diese wie gewohnt im getesteten Endpunkt bearbeiten . Die Beispielfunktion demonstriert die Erstellung einer Datei im Upload-Verzeichnis.

Zusätzliche Hinweise

Dieser Ansatz ermöglicht es Ihnen, Formulardaten im Handumdrehen zu erstellen und an den zu übergeben Test-Framework, ohne dass mit temporären Dateien gearbeitet werden muss. Auf ähnliche Weise können Sie „encoding/csv“ verwenden, um CSV-Dateien zu generieren, ohne etwas aus dem Dateisystem lesen zu müssen.

Das obige ist der detaillierte Inhalt vonWie simuliert man Datei-Uploads in Go-Tests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!