亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

有沒有辦法在 golang 中模擬 ValidationErrors?

有沒有辦法在 golang 中模擬 ValidationErrors?

Go
拉莫斯之舞 2022-11-08 17:09:20
我有一個函數可以解析類型數組中的不同字段ValidationError以生成類似于以下函數的自定義錯誤消息。func foo(err validator.ValidationErrors) []string {    var errStr []string    for _, e := range err {       tag := e.Tag()       field := e.Field()       errStr = append(errStr, tag + ":" + field)    }    return errStr}我想為此功能編寫單元測試,以確保自定義消息符合預期。如何模擬類型的變量validator.ValidationError。下面是ValidationError的結構:type ValidationErrors []FieldErrorFieldError是一個接口,其中包含用于獲取錯誤詳細信息的函數(例如Tag()、等)。Field()
查看完整描述

1 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

如果你想對一個接受的函數進行單元測試validator.ValidationErrors,只需自己構造測試值,使用實現的類型(可能是結構)FieldError。


方法不多,但如果你只想實現你的函數調用的那些,你可以嵌入validator.FieldError到結構類型中:


type mockFieldError struct {

    validator.FieldError

    tag   string

    field string

}


func (e mockFieldError) Tag() string { return e.tag }


func (e mockFieldError) Field() string { return e.field }

并構造validator.ValidationErrors(注意,嵌入式validator.FieldError是未初始化的,所以要確保被測函數沒有調用其他你沒有實現的方法,否則會panic):


    ve := validator.ValidationErrors{

        mockFieldError{tag: "a", field: "field1"},

        mockFieldError{tag: "b", field: "field2"},

    }

所以現在用上面的值調用foo編譯并返回一個字符串,你可以根據你的預期輸出斷言:


    s := foo(ve)

    fmt.Println(s) // [a:field1 b:field2]

完整的游樂場:https ://go.dev/play/p/-btZ6lrKk4V


查看完整回答
反對 回復 2022-11-08
  • 1 回答
  • 0 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號