我想要在一个大型项目中使用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
    }

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

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

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

看起来测试结果就是我所要求的?有人能帮我找出我做错了什么吗?

推荐答案

要捕获您的错误,请在测试代码中添加此判断.

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

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

Go相关问答推荐

杜松子wine -戈尼克背景在 children 围棋例行公事中被取消

macOS上GoLand 2023.3.4中的代码导航

链自定义GRPC客户端拦截器/DialOptions

在nixos上找不到XInput2.h头文件的包

使用golang sqlc中的引用参数

如何将任何类型的数据值传递到 Golang 中的 GRPC Protobuf struct ?

Secrets Manager Update Secret - Secret String 额外的 JSON 编码

同一文件上的多个 Arrow CSV 阅读器返回 null

Exchange Web 服务 - 使用 soap xml 请求查找所有未读邮件

使用 Go 根据 /etc/shadow 文件中的散列密码验证密码

有没有办法计算枚举中定义的项目总数?

使用图像解码 JPEG 时 colored颜色 不正确.解码并写入 PDF?

如何使用 fyne Go 使用 canvas.NewText() 使文本可滚动

为什么在单独的 go routine 中需要 wg.Wait() 和 close() ?

跟踪长时间运行的任务的进度 - 正确的方法

当 git clone 工作时,Go mod tidy 在私有存储库上失败

如何在循环中旋转图像以便在 golang 中创建 GIF?

Go:为一组单个结果实现 ManyDecode

在 Go 中表达函数的更好方法( struct 方法)

全局记录(across packages)