unit-testing - golang中如何比较错误

标签 unit-testing go error-handling

<分区>

上下文: 我正在进行单元测试,并试图检查我是否遇到了预期的错误。

我没有得到预期的结果,所以我尝试了一些简单的方法,它与确切的错误进行了比较,令我惊讶的是比较返回了“false”

e1 := errors.New("error")
e2 := errors.New("error")
fmt.Println(e1 == e2) // false

运行示例: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 (以及该链接中的相关帖子)了解更多详情。

关于unit-testing - golang中如何比较错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47713026/

相关文章:

android - 如何在 Mockito3.x 中使用 PowerMock?

unit-testing - 测试在主模块 .run 方法中运行的 AngularJS 代码

go http.Request.Conn.ActiveConn是一个map,那么会不会有并发map的问题呢?

go - 读取操作是否保证读取某个作者在读取之前写入的值?

c# - “Payment.GenLedDet”因其保护级别而无法访问

reactjs - react 获取数据并呈现错误(如果有)

c# - 在 EF6 上模拟 DbSet 和 ApplicationDbContext 时,第二个 Service.AllAsync() 返回空的 ICollection

iphone - 创建项目后添加SenTest测试目标

go - 先跑一个目标

android - 如何隐藏 WebView 错误页面。可能吗?