CSV的go单元测试失败

wz8daaqr  于 2023-04-09  发布在  Go
关注(0)|答案(2)|浏览(150)

我想在一个大型项目中使用csv包,我从一些基本测试开始。当输出与预期输出匹配时,我无法弄清楚为什么这个单元测试失败。
文件:

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
    }

测试文件:

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

当测试运行时,我得到以下输出:

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

看起来测试输出正是我所要求的?谁能帮我确定我做错了什么?

lyfkaqu1

lyfkaqu11#

要捕获错误,请在测试代码中添加此检查。

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

原因:当您使用w.Flush写入记录时,它会添加一个新行。

x759pob2

x759pob22#

预期的输出是first_name,last_name,user_name,但实际的输出是first_name,last_name,user_name,(注意结尾处多了一个逗号)。这就是测试失败的原因。

相关问题