我試圖斷言一個回傳 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
}
uj5u.com熱心網友回復:
Go 中的介面值存盤型別和該型別的值。
equal 方法接受 interface{} 引數,因此在第二個斷言中,您將包含型別資訊(*元資料)和 nil 值的介面值與沒有型別資訊和 nil 值的介面進行比較。
您可以強制第二個介面也包含如下型別:
assert.Equal(t, meta, (*Metadata)(nil))
另請參閱“為什么我的 nil 錯誤值不等于 nil?” 在常見問題解答中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/460049.html
