-coverprofile从覆盖率中排除未经测试的文件

时间:2018-09-29 10:41:39

标签: go testing code-coverage

我正在尝试在包含几个目录的项目上运行测试覆盖率报告(我知道这是一个不寻常的设置,但是有很多示例希望将它们组合在一起):

└── example
    ├── bar
    │   └── main.go
    ├── baz
    │   └── main.go
    ├── foo
    │   ├── main.go
    │   └── main_test.go
    └── qux
        └── main.go

但是,当它运行时,我得到一些奇怪的输出。覆盖率似乎只与唯一经过测试的文件有关,与example下的整个代码库无关。

例如:

$ go test -race -v -coverprofile .test-coverage.txt ./...
?       github.com/abcdef/example/bar    [no test files]
?       github.com/abcdef/example/baz      [no test files]
=== RUN   TestSum
--- PASS: TestSum (0.00s)
PASS
coverage: 50.0% of statements
ok      github.com/abcdef/example/foo     1.018s  coverage: 50.0% of statements
?       github.com/abcdef/example/qux    [no test files]

有人知道为什么会这样吗?是否有办法让我对所有文件(包括任何未经测试的文件)生成一定百分比的覆盖率?否则,覆盖率会完全令人误解。

1 个答案:

答案 0 :(得分:1)

使用-coverpkg标志,如下所述:

  

在每个测试中将覆盖率分析应用于与模式匹配的软件包。默认设置是每个测试仅分析要测试的程序包。有关软件包模式的说明,请参见“转到帮助软件包”。设置-cover。

示例:

go test -race -v -coverprofile .test-coverage.txt -coverpkg=example ./...

这表明将包example包括在覆盖范围统计中。不过,请务必使用软件包名称的完整版本。即github.com/user/example