Jul*_*oro 6 testing code-coverage go
我正在尝试为我的 gitlab 项目显示准确的覆盖范围徽章。
事情是我有几个包,在 gitlab-ci.yml 中,我运行
go test $(go list ./... | grep -v /vendor/) -v -coverprofile .testCoverage.txt
Run Code Online (Sandbox Code Playgroud)
我的输出是这样的:
$ go test -coverprofile=coverage.txt -covermode=atomic ./...
ok gitlab.com/[MASKED]/pam 10.333s coverage: 17.2% of statements
ok gitlab.com/[MASKED]/pam/acquisition 0.004s coverage: 57.7% of statements
ok gitlab.com/[MASKED]/pam/acquisition/api 0.005s coverage: 72.1% of statements
ok gitlab.com/[MASKED]/pam/acquisition/ftp 24.936s coverage: 73.1% of statements
ok gitlab.com/[MASKED]/pam/repartition 0.004s coverage: 90.1% of statements
Run Code Online (Sandbox Code Playgroud)
我在 Gitlab 中解析正则表达式的测试覆盖率是:
^coverage:\s(\d+(?:\.\d+)?%)
Run Code Online (Sandbox Code Playgroud)
如果我检查 .testCoverage,我会得到很多这样的行:
gitlab.com/[MASKED]/pam/repartition/repartition.go:54.33,56.5 1 1
Run Code Online (Sandbox Code Playgroud)
因此,它给我的结果90.1%是仅覆盖最后一个包的情况。
我该怎么办呢?
Jul*_*oro 13
根据这个答案,
\n\n我只需要另一个命令:
\n\ngo tool cover -func profile.cov\nRun Code Online (Sandbox Code Playgroud)\n\n这会给你结果:
\n\n\xe2\x9c\x97 go tool cover -func profile.cov\n\ngitlab.com/[MASKED]/pam/acquisition/acquisition.go:17: FetchAll 0.0%\ngitlab.com/[MASKED]/pam/acquisition/acquisition.go:32: TransformData 100.0%\ngitlab.com/[MASKED]/pam/acquisition/acquisition_mocks.go:13: FetchMeters 0.0%\ngitlab.com/[MASKED]/pam/repartition/repartition.go:102: GroupMetersByOperation 100.0%\ngitlab.com/[MASKED]/pam/repartition/repartition.go:111: SetProrataRedistributed 71.4%\ntotal: (statements) 68.7%\nRun Code Online (Sandbox Code Playgroud)\n\n在 gitlab 中,您可以更改正则表达式:
\n\n^coverage:\\s(\\d+(?:\\.\\d+)?%)\nRun Code Online (Sandbox Code Playgroud)\n\n经过
\n\n\\(statements\\)(?:\\s+)?(\\d+(?:\\.\\d+)?%)\nRun Code Online (Sandbox Code Playgroud)\n\n现在,如果您有模拟,覆盖范围将包括它们,因此您必须按照以下答案删除它们:
\n\ngo test . -coverprofile profile.cov.tmp\ncat profile.cov.tmp | grep -v "_mocks.go" > cover.out\ntool cover -func profile.cov\nRun Code Online (Sandbox Code Playgroud)\n\n当然,所有模拟都应该位于带有后缀的文件中:_mocks.go
它应该有效。
\n\n希望它对其他人有帮助!
\n