返回自定义错误类型与仅创建新错误

时间:2020-03-14 09:30:06

标签: go

让我们为简单起见,我有一个简单的函数,该函数只是尝试基于作为参数传递的字符串打开文件(不要依赖文件打开过程的简单性,因为实际示例会更复杂一些) )

func retrieveConfig(fs billy.Filesystem, app string) (Spec, error) {
    var v Spec
    filename := "releases/" + app + ".yaml"
    file, err := fs.Open(filename)

    if err != nil {
        errOpenFile := ErrOpeningConfigFile{filename}
        return Spec{}, new errOpenFile{filename}
    }

这是我正在使用的自定义错误的定义

type ErrOpeningConfigFile struct {
    s string
}

func (errConfigFileNotFound *ErrOpeningConfigFile) Error() string {
    return fmt.Sprintf("Error opening configuration file %s")
}

我之所以考虑采用这种方法,是因为我的想法是它将提供更多的覆盖范围,并使核心更具可测试性。

由于我可以在单元测试中针对自定义错误键入assert,因此现在我可以更轻松地测试错误路径。

但是,这肯定会增加代码库。

我认为相反的方法是

return nil, errors.New("Configuration file not found")

这将限制代码,但会使测试变得笨拙(或更窄范围)。

解决此问题的适当方法(或惯用的方式)是什么?

0 个答案:

没有答案