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

我试图断言一个返回 nil 的函数,但我试图断言 nil,但下面的断言没有意义。我使用github.com/stretchr/testify/assert框架断言

我试图断言一个返回 nil 的函数,但我试图断言 nil,但的断言没有意义。我使用github.com/stretchr/testify/assert框架断言

p:assert.Equal(t,meta == nil,true) fails: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) <--- p
 assert.Equal(t, meta, nil) <--- fails
}
4

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

equal 方法接受 intece {} 参数,因此在第二个断言中,您将包含类型信息 (* Metadata) 和 nil 值的接口值与没有类型信息和 nil 值的接口进行比较。

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

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

另请参阅常见问题中的"Why is my nil error value not equal to nil?"

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(412)
批处理文件中出现意外的“系统找不到指定的驱动器。”(the system cannot find the drive speci
上一篇
在iPhone中以编程方式从另一个应用程序打开iCloud设置
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(25条)