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

我正在尝试断言一个返回 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

}


芜湖不芜
浏览 94回答 1
1回答

慕标5832272

Go 中的接口值存储类型和该类型的值。equal 方法采用 interface{} 参数,因此在第二个断言中,您将包含类型信息(*元数据)和 nil 值的接口值与不包含类型信息和 nil 值的接口进行比较。您可以强制第二个接口也包含这样的类型:assert.Equal(t,&nbsp;meta,&nbsp;(*Metadata)(nil))另见“为什么我的 nil 错误值不等于 nil?”&nbsp;在常见问题解答中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go