GoCov测试覆盖率显示0%,如何修正Makefile命令识别测试用例?
问题修复方案
问题根源
- Makefile里的
$(pwd)是Make自身的变量,不是shell的pwd命令,直接用会输出错误的工作目录。 - 你在Makefile里进入
src/test目录执行命令,-coverpkg=./...只会统计test目录下的代码,但实际要覆盖的是src下的业务代码,路径范围错了。 - 手动执行是进src目录,和Makefile的工作目录不一致,导致测试上下文不匹配。
修改后的Makefile代码
coverage: cd src && \ echo $$pwd && \ go test -mod=mod -coverprofile=coverage.out -coverpkg=./... ./test/... && \ go tool cover -func=coverage.out
关键改动说明
- 把工作目录改成
src,和手动执行的环境对齐。 $(pwd)改成$$pwd,这样才会调用shell的pwd命令输出当前目录。-coverpkg=./...在src目录下执行时,会覆盖src下所有子包的代码;./test/...明确指定测试用例的目录,确保go test能找到所有测试文件。
可选:仅统计业务代码覆盖率
如果不想把test目录的代码算进去,比如业务代码都在src/pkg下,就把-coverpkg改成指定路径:
coverage: cd src && \ echo $$pwd && \ go test -mod=mod -coverprofile=coverage.out -coverpkg=./pkg/... ./test/... && \ go tool cover -func=coverage.out
内容的提问来源于stack exchange,提问作者Mabel Oza
相关产品推荐
相关产品推荐

