Go 模拟 postgresql 错误

Aru*_*run 0 postgresql unit-testing go pq

正如此答案中所讨论的,我编写了用于检查唯一键违规的代码:

if err, ok := err.(*pq.Error); ok {
    if err.Code.Name() == "unique_violation" {
        fail(w, http.StatusBadRequest, 0, "Item already exists")
                    return
        }
}
Run Code Online (Sandbox Code Playgroud)

为了编写单元测试用例,我需要模拟这个错误。我已经为错误编写了模拟,如下所示:

return pq.Error{Code: "unique_violation"}
Run Code Online (Sandbox Code Playgroud)

但这与代码不匹配。我如何嘲笑pq.Error

Car*_*man 5

正如Godoc中所述,ErrorCode is a five-character error code. err.Code.Name()获取错误的人性化版本,但错误本身应该由错误代码表示并构建,在本例中为 23505

  • 您能否提供更多信息?`err.Code.Name()` 返回什么? (2认同)