我想將 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
看起來測試輸出正是我所要求的?誰能幫我找出我做錯了什麼?
要擷取錯誤,請在測試程式碼中新增此檢查。
if len(got) != len(tt.want) { t.Errorf("GenerateCSV() string len = %v, want length %v", len(got), len(tt.want)) return }
原因:當您使用w.flush寫入記錄時,它會新增一行。
以上是CSV 的 go 單元測試失敗的詳細內容。更多資訊請關注PHP中文網其他相關文章!