我使用err113
作为golangci-lint
的一部分。
它在抱怨..。
foo_test.go:55:61: err113: do not define dynamic errors, use wrapped static errors instead: "errors.New(\"repo gave err\")" (goerr113)
repoMock.EXPECT().Save(gomock.Eq(&foooBarBar)).Return(nil, errors.New("repo gave err")),
^
foo_test.go:22:42: err113: do not define dynamic errors, use wrapped static errors instead: "errors.New(\"oops\")" (goerr113)
repoMock.EXPECT().FindAll().Return(nil, errors.New("oops"))
^
解决这个问题的最好方法是什么?
引用https://github.com/Djarvur/go-err113
此外,除了用于初始化包级变量的调用和包装其他错误的errors.New()调用外,还报告了对fmt.Errorf()方法的任何调用。
我正试着找一个习语例子来说明这一点。
发布于 2020-06-09 22:01:39
按照建议声明包级变量:
var repoGaveErr = errors.New("repo gave err")
func someFunc() {
repoMock.EXPECT().Save(gomock.Eq(&foooBarBar)).Return(nil, repoGaveErr)
}
每次对errors.New的调用都分配一个新的唯一错误值。应用程序通过声明包级变量来创建一个表示错误的值。
单一价值的动机有两种:
值io.EOF是一个典型的示例。
发布于 2020-12-09 11:18:03
由于GO 1.13,您可以定义一个新的错误类型,包装并使用它。例如,如果要返回“不允许的操作”+操作。你需要实现这样的东西
var OperationNotPermit = errors.New("operation not permitted")
func OperationNotFoundError(op string) error {
return fmt.Errorf("OperationNotPermit %w : %s", OperationNotPermit, op)
}
然后在您的代码中,当您想返回错误时,
return nil, OperationNotFoundError(Op)
让我们回到问题案例:
首先,定义自定义错误和wapper
var repoError = errors.New("repositoryError")
func RepositoryError(msg string) error {
return fmt.Errorf("%w: %s", repoError,msg)
}
那么在你的代码中,
repoMock.EXPECT().Save(gomock.Eq(&foooBarBar)).Return(nil, RepositoryError("YOUR CUSTOM ERROR MESSAGE"))
发布于 2021-01-03 21:22:05
由于以前没有说过,您的可能不需要为测试定义包级错误。如果要包装错误,以便在调用方中进行比较和展开,那么只要为测试的目的服务,在测试中返回动态错误就可以了。
https://stackoverflow.com/questions/62291709
复制相似问题