Heim >Backend-Entwicklung >Golang >Wie simuliere ich das Hochladen von Dateien 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!