【发布时间】:2018-05-22 14:54:00
【问题描述】:
上下文: 我正在做单元测试,并试图检查我是否得到了预期的错误。
我没有得到预期的结果,所以我尝试了一些简单的方法来比较确切的错误,我很惊讶比较返回“false”
e1 := errors.New("error")
e2 := errors.New("error")
fmt.Println(e1 == e2) // false
运行示例:https://play.golang.org/p/cvjjiJT_5T
谁能解释一下为什么返回 false 以及如何正确检查错误之间的相等性?
【问题讨论】:
-
errors.New 返回指向值的指针。 e1 / e2 是指向不同值的不同指针。等式测试必然是错误的,因为它将检查指针地址,而不是内部值。您可以使用 %#v 格式 play.golang.org/p/Vu5kaBhh6y 看到这一点。改用强类型错误和类型断言。
-
你可以看看github.com/stretchr/testify单元测试库。它包含诸如 assert.Equal(t, err1, err2) 之类的函数,它们以适当的方式处理错误比较。
标签: unit-testing go error-handling