Heim  >  Artikel  >  Backend-Entwicklung  >  Unittest eines HTTP-Handlers, der mehrere Dateistreams zurückgibt

Unittest eines HTTP-Handlers, der mehrere Dateistreams zurückgibt

WBOY
WBOYnach vorne
2024-02-09 08:39:18711Durchsuche

对返回多个文件流的 HTTP 处理程序进行单元测试

In diesem Artikel stellt der PHP-Editor Strawberry vor, wie man einen HTTP-Handler testet, der mehrere Dateistreams zurückgibt. Während des Entwicklungsprozesses stoßen wir häufig auf Situationen, in denen mehrere Dateiströme zurückgegeben werden müssen, z. B. Bildkomprimierung, Dateizusammenführung usw. Allerdings ist Unit-Test in diesem Fall nicht so einfach zu implementieren. In diesem Artikel erfahren Sie, wie Sie mit den entsprechenden Tools und Techniken effektive Komponententests schreiben, um sicherzustellen, dass unsere HTTP-Handler mehrere Dateiströme korrekt zurückgeben.

Frageninhalt

http-Handler

Ich habe einen HTTP-Handler wie diesen:

func routehandler(c echo.context) error {
    outs := make([]io.reader, 5)
    for i := range outs {
        outs[i] = // ... comes from a logic.
    }

    return c.stream(http.statusok, "application/binary", io.multireader(outs...))
}

Einheitentests

Ich habe vor, einen Unit-Test für einen http-Handler zu schreiben und den Rückgabestrom für mehrere Dateien zu untersuchen.

Meine Unit-Tests haben diese Hilfstypen und -funktionen:

type handler func(echo.context) error

// send request to a handler. get back response body.
func send(req *http.request, handler handler) ([]byte, error) {
    w := httptest.newrecorder()
    e := echo.new()
    c := e.newcontext(req, w)
    // call the handler.
    err := handler(c)
    if err != nil {
        return nil, err
    }
    res := w.result()
    defer res.body.close()
    return ioutil.readall(res.body)
}

Ich sende dann eine Anfrage an den http-Handler meines Unit-Tests mit den oben genannten Typen und Funktionen:

// From within my unit test:

// Initialize request...

var data []byte
data, err := Send(request, RouteHandler)

// How to separate the multiple files returned here?
// How to work with the returned data?

Verarbeiten Sie den zurückgegebenen Dateistream

Wie trenne ich mehrere vom HTTP-Handler zurückgegebene Dateien? Wie verwende ich den vom HTTP-Handler zurückgegebenen Datenstrom?

Workaround

...Mögliche Optionen: Schreiblänge gefolgt vom Dateiinhalt...

Tatsächlich ist die oben von @CeriseLimón kommentierte Option bereits implementiert und wird vom Frontend verwendet.

Das obige ist der detaillierte Inhalt vonUnittest eines HTTP-Handlers, der mehrere Dateistreams zurückgibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen