go表单验证单元测试必须覆盖结构体标签解析、错误收集、边界输入三类逻辑,否则易漏空字符串、零值、嵌套字段失效等问题;需用validator包显式调用validate.struct(),构造典型边界输入并断言具体字段与规则。
Go 的表单验证本身不自带运行时反射校验,单元测试必须覆盖结构体标签解析、错误收集、边界输入三类逻辑,否则容易漏掉空字符串、零值、嵌套字段失效等典型问题。
用 validator 包 + reflect 模拟真实校验流程
Go 官方没有内置表单验证器,主流方案是 go-playground/validator。它的校验依赖 struct tag(如 validate:"required,email"),而单元测试不能只测“传入合法数据返回 nil”,必须主动触发 tag 解析路径。
- 在测试中显式调用
validate.Struct(),而非只测业务函数内部逻辑 - 确保 validator 实例已注册自定义函数(如有),否则
validate:"myfunc"会静默跳过 - 对指针字段(如
*string)要传地址,否则nil指针不会触发required校验 - 嵌套结构体需打上
validate:"dive",否则子字段 tag 不生效
构造易出错的边界输入组合
真实表单提交中,前端可能发来空字符串、全空白字符串、超长字符串、非法邮箱格式、负数 ID 等。仅用“理想数据”测试会掩盖验证漏洞。