我最近开始使用
go build -cover -o
来收集 代码覆盖率,以便在 Go 1.20 中进行集成测试。我使用 textfmt
来获取覆盖范围,但查看文本文件,它有一个我为其构建可执行文件的文件的本地路径,以及驻留在同一项目中的实用程序函数的模块 URL。下面是一个例子:
./main/program.go
package main
import "example.com/m/util"
func main() {
util.PrintFromUtil()
}
./util/util.go
package util
import "fmt"
func PrintFromUtil() {
fmt.Println("This is from package util")
}
这是我用于获取覆盖率配置文件的命令:
$ go build -cover -o ./main/program ./main/program.go
$ GOCOVERDIR=coverage ./main/program
This is from package util
$ go tool covdata textfmt -i=coverage -o profile.txt
$ cat profile.txt
mode: set
/MYLOCALPATH/main/program1.go:5.13,7.2 1 1
example.com/m/util/util.go:5.22,7.2 1 1
问题似乎出在进口上。一种简单的解决方法是手动清理 profile.txt,将本地路径替换为项目 url,反之亦然。但是,有没有更干净的方法来做到这一点?由于它是用于集成测试的,我可以想象测试中应该有大量的导入。如有任何帮助,我们将不胜感激。