Rumah  >  Artikel  >  pembangunan bahagian belakang  >  pergi ujian unit untuk CSV gagal

pergi ujian unit untuk CSV gagal

王林
王林ke hadapan
2024-02-06 08:42:03697semak imbas

CSV 的 go 单元测试失败

Kandungan soalan

Saya mahu menggunakan pakej csv untuk projek besar, dan saya mulakan dengan beberapa ujian asas. Saya tidak dapat mengetahui mengapa ujian unit ini gagal apabila output kelihatan sepadan dengan output yang dijangkakan.

Fail:

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
    }

Fail ujian:

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

Apabila ujian dijalankan, saya mendapat output berikut:

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

Nampaknya output ujian betul-betul seperti yang saya minta? Bolehkah sesiapa membantu saya mengetahui apa yang saya lakukan salah?


Jawapan Betul


Untuk menangkap ralat, tambahkan semakan ini dalam kod ujian anda.

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

Punca: Apabila anda menggunakan w.flush untuk menulis rekod, ia menambah baris baharu.

Atas ialah kandungan terperinci pergi ujian unit untuk CSV gagal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam