Heim  >  Artikel  >  Backend-Entwicklung  >  Der Go-Unit-Test für CSV schlägt fehl

Der Go-Unit-Test für CSV schlägt fehl

王林
王林nach vorne
2024-02-06 08:42:03695Durchsuche

CSV 的 go 单元测试失败

Frageninhalt

Ich möchte das CSV-Paket für ein großes Projekt verwenden und beginne mit einigen grundlegenden Tests. Ich kann nicht herausfinden, warum dieser Komponententest fehlschlägt, wenn die Ausgabe mit der erwarteten Ausgabe übereinstimmt.

Datei:

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
    }

Testdatei:

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

Wenn der Test läuft, erhalte ich folgende Ausgabe:

FAIL: TestGenerateCSV
GenerateCSV() = first_name,last_name,user_name
        , want first_name,last_name,user_name

Sieht aus, als ob die Testausgabe genau das ist, wonach ich gefragt habe? Kann mir jemand helfen herauszufinden, was ich falsch mache?


Richtige Antwort


Um Fehler zu erkennen, fügen Sie diese Prüfung in Ihren Testcode ein.

if len(got) != len(tt.want) {
            t.Errorf("GenerateCSV() string len = %v, want length %v", len(got), len(tt.want))
            return
        }

Ursache: Wenn Sie w.flush zum Schreiben eines Datensatzes verwenden, wird eine neue Zeile hinzugefügt.

Das obige ist der detaillierte Inhalt vonDer Go-Unit-Test für CSV schlägt fehl. 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