gpt4 book ai didi

go - 有错误的表测试

转载 作者:数据小太阳 更新时间:2023-10-29 03:13:09 26 4
gpt4 key购买 nike

给定一个像这样的 Golang 函数:

func GetKey(key string, data map[string]string) (string, error) {
value, present := data[key]

if !present {
return "", errors.New(fmt.Sprintf("requested key does not exist: %s", key))
}

return value, nil
}

我将如何使用测试表来测试我返回的错误是否存在?例如:

func TestGetKey(t *testing.T) {

cases := []struct {
Input map[string]string
Key string
Result string
Err error
}{
{
map[string]string{
"foo": "bar",
"baz": "bah",
},
"foo",
"bar",
nil,
},

{
map[string]string{
"foo": "bar",
"baz": "bah",
},
"nope",
"",
????,
},
}

// and something like
for _, v := range cases {
actual, err := GetKey(v.Key, v.Input)
if actual != v.Result {
t.Fatalf("Expected %s. Got %s", v.Result, actual)
}
}
}

最佳答案

您可以存储您期望得到的相同错误,然后断言两者返回相同的 Error()

因此在您的 map 中,对于错误情况:

{
map[string]string{
"foo": "bar",
"baz": "bah",
},
"nope",
"",
errors.New("requested key does not exist: nope"),
}

在你的测试代码中:

for _, v := range cases {
actual, err := GetKey(v.Key, v.Input)
if actual != v.Result {
t.Fatalf("Expected %s. Got %s", v.Result, actual)
}
if (v.Err != nil) && (err == nil) {
t.Fatalf("Expecting error (%s), did not get it", v.Err.Error())
} else if (v.Err == nil) && (err != nil) {
t.Fatalf("Got unexpected error: (%s)", err.Error())
} else if (v.Err != nil) && (err != nil) && (v.Err.Error() != err.Error()) {
t.Fatalf("Expecting error (%s). Got (%s)", v.Err.Error(), err.Error())
}
}

请注意,在以下几种情况下,您预计不会出现错误但实际出现错误、预期出现错误但未出现错误以及预期出现错误但出现不同错误。

关于go - 有错误的表测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45383927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com