我正在尝试在包含几个目录的项目上运行测试覆盖率报告(我知道这是一个不寻常的设置,但是有很多示例希望将它们组合在一起):
└── 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]
有人知道为什么会这样吗?是否有办法让我对所有文件(包括任何未经测试的文件)生成一定百分比的覆盖率?否则,覆盖率会完全令人误解。
答案 0 :(得分:1)
使用-coverpkg
标志,如下所述:
在每个测试中将覆盖率分析应用于与模式匹配的软件包。默认设置是每个测试仅分析要测试的程序包。有关软件包模式的说明,请参见“转到帮助软件包”。设置-cover。
示例:
go test -race -v -coverprofile .test-coverage.txt -coverpkg=example ./...
这表明将包example
包括在覆盖范围统计中。不过,请务必使用软件包名称的完整版本。即github.com/user/example