在我的测试文件中,我试图将检测到的实际错误与预期错误进行比较。但是,这种比较评估为假,我不确定为什么。当我创建两个相同的错误并进行比较时,甚至会发生这种情况。
代码段:
func TestCompareErrors(t *testing.T) {
if fmt.Errorf("Test Error") != fmt.Errorf("Test Error") {
t.Errorf("Test failed")
}
}
这会导致“测试失败”
答案 0 :(得分:3)
您正在比较恰好具有相同错误消息的两个不同值。您希望比较预定义的错误值,就像使用io.EOF
等常见值一样。
http://play.golang.org/p/II8ZeASwir
var errTest = fmt.Errorf("test error")
func do() error {
return errTest
}
func main() {
err := do()
if err == errTest {
log.Fatal("received error: ", err)
}
}
您可以阅读"Errors are Values"以获得更深入的解释。
如果您需要提供有关错误的更多信息,可以创建自己的错误类型。然后,您可以将所需的任何信息附加到错误中,并通过类型断言检查该类型的错误。
type myError string
func (e myError) Error() string {
return string(e)
}
func do() error {
return myError("oops")
}
func main() {
err := do()
if err, ok := err.(myError); ok {
log.Fatal("received myError: ", err)
}
}
答案 1 :(得分:3)
使用reflect.DeepEqual比较值。
$seq 12 | pr -7ats, | xargs -I X echo "SELECT * FROM Table IN (X)" #or execute mysql
SELECT * FROM Table WHERE id IN (1,2,3,4,5,6,7)
SELECT * FROM Table WHERE id IN (8,9,10,11,12)
中的示例