Maison >développement back-end >Golang >le test unitaire pour CSV échoue

le test unitaire pour CSV échoue

王林
王林avant
2024-02-06 08:42:03729parcourir

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
    }

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

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

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
        }

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!

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