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

Patricia Arquette
Freigeben: 2024-11-03 08:21:02
Original
967 Leute haben es durchsucht

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

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!

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!