为了账号安全,请及时绑定邮箱和手机立即绑定

golang 测试断言函数返回 nil 失败

golang 测试断言函数返回 nil 失败

Go
芜湖不芜 2022-12-05 11:11:10
我正在尝试断言一个返回 nil 的函数,但我正在尝试断言 nil 但以下断言没有意义。我正在使用github.com/stretchr/testify/assert 框架来断言通过: assert.Equal(t, meta == nil, true)失败:assert.Equal(t, meta, nil)我不确定为什么这有任何意义。有人可以帮忙吗?正在测试的方法:type Metadata struct {    UserId          string}func GetAndValidateMetadata(metadata map[string]string) (*Metadata, error) {    userId _ := metadata["userId"]    if userId == "" {        return nil, errors.New("userId is undefined")    }    meta := Metadata{        UserId:          userId,        }    return &meta, nil}测试用例:func TestValidation(t *testing.T) {    metadata := map[string]string{        "fakeUserId": "testUserId",    }    meta, err := GetAndValidateMetadata(metadata) assert.Equal(t, meta == nil, true) <--- passes assert.Equal(t, meta, nil) <--- fails}
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

Go 中的接口值存储类型和该类型的值。

equal 方法采用 interface{} 参数,因此在第二个断言中,您将包含类型信息(*元数据)和 nil 值的接口值与不包含类型信息和 nil 值的接口进行比较。

您可以强制第二个接口也包含这样的类型:

assert.Equal(t, meta, (*Metadata)(nil))

另见“为什么我的 nil 错误值不等于 nil?” 在常见问题解答中。


查看完整回答
反对 回复 2022-12-05
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信