执行go test生成全量覆盖率报告时遇“no required module provides package .out”错误
解决Go test生成全项目覆盖率时的"no required module provides package .out"错误
直接解决方案
在Windows终端中执行命令时,给-coverprofile的参数值加上引号:
go test -coverprofile="coverage.out" ./...
如果使用PowerShell,也可以用单引号包裹参数:
go test '-coverprofile=coverage.out' ./...
问题根源
Windows的CMD终端对命令参数的解析逻辑和类Unix终端不同,当你直接写-coverprofile=coverage.out ./...时,CMD会错误地将coverage.out ./...整体作为-coverprofile的参数值。Go在处理这个参数时,会把.out识别成一个包路径,从而抛出找不到包的错误。而单个包测试时用go test -coverprofile=coverage.out .能正常运行,是因为后面的.不会被CMD错误拆分。
额外可选方案
如果上述方法无效,你可以:
- 使用Git Bash、WSL终端或其他类Unix风格的终端执行命令,这类终端的参数解析逻辑更符合Go命令的预期;
- 分批次测试单个包后,用
go tool cover命令合并覆盖率结果(不过这种方法比较繁琐,优先推荐前面的引号方案)。
内容的提问来源于stack exchange,提问作者Yessentemir Utepov
相关产品推荐
相关产品推荐

