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