我有一個具有以下結構的 Go 項目:foo/foo.go
foo/foo_test.go
main.go如您所見,沒有針對main.go.我使用以下命令收集覆蓋率報告:go test ./foo ./ -coverprofile=coverage.txt -covermode=atomic在這里./foo并./顯示在哪里尋找包裹。問題:我將覆蓋率報告發(fā)送到 codecov.io,這表明我的代碼 100% 被測試覆蓋。但這不是真的,因為我main.go根本沒有測試。似乎系統(tǒng)只計算那些明確指定測試文件的包。問題:如何修復覆蓋率報告以計算有關未測試包的信息?注意:你可以在GitHub 上找到我的項目,真實的統(tǒng)計數(shù)據(jù)在這里。該項目具有不同的結構,但問題仍然存在(錯誤的報道)。
2 回答

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
該-coverpkg
標志可用于指定用作覆蓋分析基礎的包。
-coverpkg pattern1,pattern2,pattern3 Apply coverage analysis in each test to packages matching the patterns. The default is for each test to analyze only the package being tested. See 'go help packages' for a description of package patterns. Sets -cover.
所以在你的具體例子中,這將做到:
go test -coverpkg=.,./foo -coverprofile=coverage.txt -covermode=atomic . ./foo
要將其應用于完整的模塊/項目,您可以使用:
go test -coverpkg=./... -coverprofile=coverage.txt -covermode=atomic ./...
另一種選擇是將“空”測試文件放入當前沒有測試文件的包的文件夾中。這樣它們將自然地包含在默認覆蓋分析中,但顯然它們不會覆蓋任何內容。

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
試試這個:
go test -coverpkg=./... -race -coverprofile=coverage.txt -covermode=atomic ./..
- 2 回答
- 0 關注
- 126 瀏覽
添加回答
舉報
0/150
提交
取消