Maison  >  Article  >  développement back-end  >  Comment simuler les téléchargements de fichiers dans les tests Go ?

Comment simuler les téléchargements de fichiers dans les tests Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 01:48:02942parcourir

How to Simulate File Uploads in Go Tests?

Test des téléchargements de fichiers dans Go

Lors du test des points de terminaison qui gèrent les téléchargements de fichiers, il est nécessaire de définir le champ Request.FormFile. Malheureusement, se moquer simplement de la structure FormFile complète est une approche trop complexe. Au lieu de cela, il est possible d'exploiter le package mime/multipart pour créer l'instance FormFile nécessaire.

Utilisation de CreateFormFile

La fonction CreateFormFile, membre du type Writer, fournit un moyen pratique de générer un en-tête de données de formulaire avec un nom de champ et un nom de fichier spécifiques. Le io.Writer résultant peut ensuite être transmis à la fonction httptest.NewRequest.

Exemple d'utilisation de Pipes

Une approche consiste à écrire le FormFile dans un tampon io.ReaderWriter ou utilisez un io.Pipe. L'exemple suivant illustre cette dernière méthode :

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

Gestion de la requête

Avec les données FormFile dans la requête, vous pouvez les gérer dans le point de terminaison testé comme d'habitude . L'exemple de fonction montre la création d'un fichier dans le répertoire uploads.

Notes supplémentaires

Cette approche vous permet de créer des données de formulaire à la volée, en les transmettant au cadre de test sans avoir besoin de travailler avec des fichiers temporaires. Vous pouvez de la même manière utiliser encoding/csv pour générer des fichiers CSV sans avoir besoin de lire à partir du système de fichiers.

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn