Maison  >  Article  >  développement back-end  >  Test unitaire d'un gestionnaire HTTP qui renvoie plusieurs flux de fichiers

Test unitaire d'un gestionnaire HTTP qui renvoie plusieurs flux de fichiers

WBOY
WBOYavant
2024-02-09 08:39:18706parcourir

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

Dans cet article, l'éditeur PHP Strawberry présentera comment tester unitairement un gestionnaire HTTP qui renvoie plusieurs flux de fichiers. Au cours du processus de développement, nous rencontrons souvent des situations dans lesquelles plusieurs flux de fichiers doivent être renvoyés, comme la compression d'images, la fusion de fichiers, etc. Cependant, les tests unitaires dans ce cas ne sont pas si simples à mettre en œuvre. Dans cet article, nous explorerons comment utiliser les outils et techniques appropriés pour écrire des tests unitaires efficaces afin de garantir que nos gestionnaires HTTP renvoient correctement plusieurs flux de fichiers.

Contenu des questions

gestionnaire http

J'ai un gestionnaire http comme celui-ci :

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...))
}

Tests unitaires

Je prévois d'écrire un test unitaire pour un gestionnaire http et d'étudier le flux de retour de plusieurs fichiers.

Mes tests unitaires ont ces types d'assistance et fonctions :

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)
}

J'envoie ensuite une requête au gestionnaire http à partir du test unitaire en utilisant les types et fonctions ci-dessus :

// 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?

Gérer le flux de fichiers renvoyé

Comment séparer plusieurs fichiers renvoyés par le gestionnaire http ? Comment utiliser le flux de données renvoyé par le gestionnaire http ?

Solution de contournement

...Options possibles : longueur d'écriture suivie du contenu du fichier...

En fait, l'option ci-dessus commentée par @CeriseLimón est déjà implémentée et utilisée par le frontend.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer