第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確測試錯誤對象?

如何正確測試錯誤對象?

Go
GCT1015 2022-07-25 11:08:13
所以讓我們假設(shè)我有一個我想測試的功能。這個函數(shù)看起來像這樣:func coolFunction(input int) (error, int) {  if input == 1 {    err := error.New("This is an error")    number := 400  } else {    err := nil    number := 200  }  return err, number}如果我想測試這個函數(shù),有正面和負(fù)面的情況,我必須寫一個這樣的測試函數(shù):func TestCoolFunction(t *testing.T) {    type args struct {        input int    }    tests := []struct {        name         string        args         args        wantError    error        wantInt      int    }{        {"No error",             args{                0,            },             nil,            200,             },    }}所以這很好用。但是我將如何測試錯誤對象不是的否定情況nil?我的目標(biāo)是知道 if error != nil,所以測試顯示 PASS 作為結(jié)果,同時使用上述結(jié)構(gòu)。有任何想法嗎?
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻(xiàn)1757條經(jīng)驗 獲得超8個贊

如果我理解正確,您想在某些條件下檢查正確的錯誤返回。


這是:


func coolFunction(input int) (int, error) {

    var err error

    var number int

    if input == 1 {

        err = errors.New("This is an error")

        number = 400

    } else {

        err = nil

        number = 200

    }


    return number, err

}

然后在測試文件中,您需要對您期望錯誤的事實有一個理解或協(xié)議(正確地)。就像下面的標(biāo)志一樣expectError bool,這對于您的情況來說是正確的。


您還可以擁有特定錯誤類型的字段并檢查返回的類型是否正是該類型。


func TestCoolFunction(t *testing.T) {


    var testTable = []struct {

        desc        string

        in          int

        expectError bool

        out         int

    }{

        {"Should_fail", 1, true, 0},

        {"Should_pass", 100, false, 200},

    }


    for _, tt := range testTable {


        t.Run(tt.desc, func(t *testing.T) {

            out, err := coolFunction(tt.in)

            if tt.expectError {

                if err == nil {

                    t.Error("Failed")

                }

            } else {

                if out != tt.out {

                    t.Errorf("got %d, want %d", out, tt.out)

                }

            }

        })


    }

}

DeepEqual使用@mkopriva 建議的添加特定錯誤檢查


func TestCoolFunction(t *testing.T) {


    var testTable = []struct {

        desc        string

        in          int

        expectError error

        out         int

    }{

        {"Should_fail", 1, errors.New("This is an error"), 0},

        {"Should_pass", 100, nil, 200},

    }


    for _, tt := range testTable {


        t.Run(tt.desc, func(t *testing.T) {

            out, err := coolFunction(tt.in)

            if tt.expectError != nil {

                if !reflect.DeepEqual(err, tt.expectError) {

                    t.Error("Failed")

                }

            } else {

                if out != tt.out {

                    t.Errorf("got %d, want %d", out, tt.out)

                }

            }

        })


    }

}

同樣DeepEqual是為了演示,您實際上應(yīng)該使用一些不同的方法來檢查錯誤,這樣更快。這取決于您的應(yīng)用程序中錯誤的設(shè)計方式。您可以使用標(biāo)記錯誤或類型/接口檢查?;蜃远x錯誤類型中基于 const 的枚舉字段。


查看完整回答
反對 回復(fù) 2022-07-25
  • 1 回答
  • 0 關(guān)注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號