我有一個函式可以決議型別陣列中的不同欄位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 []FieldError
FieldError是一個介面,其中包含用于獲取錯誤詳細資訊的函式(例如Tag()、等)。Field()
uj5u.com熱心網友回復:
如果你想對一個接受的函式進行單元測驗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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/429817.html
上一篇:如何在GoogleCloudFunction中將非默認Google服務帳戶憑據與SecretManagerService一起使用?
