ken*_*ire 2 error-handling unit-testing go
上下文:我正在做单元测试,并试图检查是否出现预期的错误。
我没有得到预期的结果,所以我尝试了一些与精确错误进行比较的简单操作,但惊讶的是,比较结果返回“ false”
e1 := errors.New("error")
e2 := errors.New("error")
fmt.Println(e1 == e2) // false
Run Code Online (Sandbox Code Playgroud)
运行示例:https://play.golang.org/p/cvjjiJT_5T
有人可以解释一下为什么它返回false以及如何正确检查错误之间的相等性吗?
您正在使用相同的错误消息创建两个不同的错误变量。将它们与进行比较时==,您会得到,false因为它们不是相同的变量。
如果要比较错误消息,请尝试e1.Error() == e2.Error()。但是,比较错误消息仍然不是一个好主意。您可以考虑创建一些错误常量(例如e1 == ErrContentNotFound)或为错误添加一些ID并进行比较(例如e1.ID == ContentNotFoundID)。有关更多详细信息,请查看https://dave.cheney.net/2016/04/07/constant-errors(以及该链接中的相关文章)。