我试图在我的部分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
}
以下是go tool -cover
中的内容:
击中那个区块并不容易。除了创建一个特殊的测试目录,我试图打开的文件不是常规文件,我无法想办法。这似乎很复杂。
这本身并不是太多的交易,但这意味着我必须记住97.3%
报道是正确的数字。如果我看到这个数字下降,是否意味着我已经破坏了我的测试并且现在有更多未发现的代码?或者只是我通过简化和删除或死代码来设法改进我的软件包?它导致第二次猜测。
对某些人而言,更重要的是,在商业环境中,这是一个很好的构建仪表板的障碍。
答案 0 :(得分:5)
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)
}