我正试图在我的一些Go包上保持100%的代码覆盖率.这在任何地方都不可行,即使我-integration
在构建系统上使用构建标记选择了一些测试,但它应该可以用于我相对孤立的库包.
但是,我无法处理模糊错误路径的覆盖范围.
下面是我的一个方法示例,它是集成测试的一部分,其中有一个真正的文件系统:
func (idx Index) LoadPost(title string) (*PostSpec, string, error) {
postFolder := strings.Replace(strings.ToLower(title), " ", "_", -1)
spec, err := idx.getSpec(postFolder)
if err != nil {
return nil, "", err
}
f, err := os.Open(path.Join(idx.blogdir, postFolder, "content.html"))
if err != nil {
return nil, "", err
}
defer f.Close()
b, err := ioutil.ReadAll(f)
if err != nil {
return nil, "", err
}
return spec, string(b), nil
}
Run Code Online (Sandbox Code Playgroud)
这是它的样子go tool -cover
:
击中那个区块并不容易.除了创建一个特殊的测试目录,我试图打开的文件不是常规文件,我想不出任何办法.这似乎很复杂.
这本身并不是太多的交易,但这意味着我必须记住,97.3%
报道是正确的数字.如果我看到这个数字下降,是否意味着我已经破坏了我的测试并且现在有更多未覆盖的代码?或者只是我通过简化和删除或死代码设法改进我的包?它导致第二次猜测.
对某些人来说更重要的是,在商业环境中,它是一个很好的构建仪表板的障碍.
io/ioutil/ioutil_test.go
只是通过使用不存在的文件调用ioutil.ReadFile()函数来测试该错误.
这不应该要求任何设置.
filename := "rumpelstilzchen"
contents, err := ReadFile(filename)
if err == nil {
t.Fatalf("ReadFile %s: error expected, none found", filename)
}
Run Code Online (Sandbox Code Playgroud)