有没有办法在 golang 中模拟 ValidationErrors?

我有一个函数可以解析类型数组中的不同字段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()


拉莫斯之舞
浏览 103回答 1
1回答

眼眸繁星

如果你想对一个接受的函数进行单元测试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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go