golang 测试断言函数中的 nil return 失败
golang test assert the nil return from function is failing
我正在尝试断言一个 returns 为 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
}
Go 中的接口值存储类型和该类型的值。
equal 方法采用 interface{} 参数,因此在第二个断言中,您将包含类型信息(*元数据)和 nil 值的接口值与没有类型信息和 nil 值的接口进行比较。
您可以强制第二个接口也包含这样的类型:
assert.Equal(t, meta, (*Metadata)(nil))
另请参阅常见问题解答中的 "Why is my nil error value not equal to nil?"。
我正在尝试断言一个 returns 为 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
}
Go 中的接口值存储类型和该类型的值。
equal 方法采用 interface{} 参数,因此在第二个断言中,您将包含类型信息(*元数据)和 nil 值的接口值与没有类型信息和 nil 值的接口进行比较。
您可以强制第二个接口也包含这样的类型:
assert.Equal(t, meta, (*Metadata)(nil))
另请参阅常见问题解答中的 "Why is my nil error value not equal to nil?"。