go test覆盖率文件找不到包

4

当我尝试以下操作时

go test -coverprofile=coverage.out

我得到了这个coverage.out文件:
mode: set
_/Users/gert/Desktop/httx/auth.go:10.66,11.54 1 0
_/Users/gert/Desktop/httx/auth.go:11.54,13.89 2 0
_/Users/gert/Desktop/httx/auth.go:17.3,17.11 1 0
_/Users/gert/Desktop/httx/auth.go:13.89,16.4 2 0
_/Users/gert/Desktop/httx/auth.go:22.42,25.2 2 0
...

但是,当我执行以下操作时:
go tool cover -func=coverage.out

看起来 coverage.out 的格式不正确?

cover: can't find "auth.go": cannot find package "_/Users/gert/Desktop/httx/" in any of:                                     
        /usr/local/Cellar/go/1.7.1/libexec/src/_/Users/gert/Desktop/httx (from $GOROOT)                                      
        /Users/gert/go/src/_/Users/gert/Desktop/httx (from $GOPATH)

编辑:请注意,go test -cover 是可行的。
PASS                                                                                                                         
coverage: 29.7% of statements                                                                                                
ok      _/Users/gert/Desktop/httx       0.015s
2个回答

6

您的包 /Users/gert/Desktop/httx/ 位于您的 $GOPATH 之外,而该路径为 /Users/gert/go。将 httx 包移动到您的 $GOPATH 下的任何位置即可正常工作。您可以将其移动到 /Users/gert/go/src/httx 或类似 /Users/gert/go/src/github.com/your-github-name/httx 的位置(假设您使用 GitHub)。


好的,但是为什么go test -cover命令可以给我一个百分比? - Gert Cuykens
2
@GertCuykens 我只是在猜测,但我认为这是因为当你运行 go test 时,它知道正在测试的代码,但当你尝试稍后运行 go tool cover 时,它必须根据 coverage.out 中的包名称进行查找,而找不到它们。 - jcbwlkr
2
好的,谢谢你的答案是正确的,但是我打算在 Github 上创建一个功能请求,因为对我来说,强制将您的 src 放在 gopath 中仅供 cover 工具使用是不直观的。 - Gert Cuykens

3

请查看使用相对路径

将覆盖路径更改为./

sed -i "s/_$(pwd|sed 's/\//\\\//g')/./g" coverage.out

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接