Maison > développement back-end > Golang > le corps du texte

le test unitaire pour CSV échoue

王林
Libérer: 2024-02-06 08:42:03
avant
695 Les gens l'ont consulté

CSV 的 go 单元测试失败

Contenu de la question

Je souhaite utiliser le package csv pour un grand projet et je commence par quelques tests de base. Je n'arrive pas à comprendre pourquoi ce test unitaire échoue lorsque le résultat semble correspondre au résultat attendu.

Fichier :

package csv

import (
    "bytes"
    "encoding/csv"
)

func generatecsv(records [][]string) (string, error) {
    buf := bytes.buffer{}

    w := csv.newwriter(&buf)

    for _, record := range records {
        if err := w.write(record); err != nil {
            // handle the err
            }
    }
        w.flush()

        if err := w.error(); err != nil {
            // handle the error
        }

        return buf.string(), nil
    }
Copier après la connexion

Fichier de test :

package csv

import "testing"

func testgeneratecsv(t *testing.t) {

    records := [][]string{
        {"first_name","last_name","user_name"},
    }
    type args struct {
        records [][]string
    }
    tests := []struct {
        name    string
        args    args
        want    string
        wanterr bool
    }{
        // todo: add test cases.
        {"t1", args{records: records,}, "first_name,last_name,user_name", false},
    }
    for _, tt := range tests {
        t.run(tt.name, func(t *testing.t) {
            got, err := generatecsv(tt.args.records)
            if (err != nil) != tt.wanterr {
                t.errorf("generatecsv() error = %v, wanterr %v", err, tt.wanterr)
                return
            }
            if got != tt.want {
                t.errorf("generatecsv() = %v, want %v", got, tt.want)
            }
        })
    }
Copier après la connexion

Lorsque le test est exécuté, j'obtiens le résultat suivant :

FAIL: TestGenerateCSV
GenerateCSV() = first_name,last_name,user_name
        , want first_name,last_name,user_name
Copier après la connexion

On dirait que le résultat du test correspond exactement à ce que j'ai demandé ? Quelqu'un peut-il m'aider à comprendre ce que je fais de mal ?


Réponse correcte


Pour détecter les erreurs, ajoutez cette vérification dans votre code de test.

if len(got) != len(tt.want) {
            t.Errorf("GenerateCSV() string len = %v, want length %v", len(got), len(tt.want))
            return
        }
Copier après la connexion

Cause : Lorsque vous utilisez w.flush pour écrire un enregistrement, cela ajoute une nouvelle ligne.

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!

source:stackoverflow.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!