Go 覆盖率配置文件提供了模块 url 和本地路径的组合

问题描述 投票:0回答:1

我最近开始使用

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,反之亦然。但是,有没有更干净的方法来做到这一点?由于它是用于集成测试的,我可以想象测试中应该有大量的导入。如有任何帮助,我们将不胜感激。

go code-coverage go-testing go-build
1个回答
0
投票

看来您没有使用 Go 模块(没有

go.mod
文件)并且在
$GOPATH
之外工作,所以这是您的
main
函数的导入路径。

将代码放入

example.com/m
模块中怎么样?如果您想进一步组织源代码,或者在 GOPATH 内工作,您还可以创建一个新模块并
在工作区中组合多个模块。大多数人选择第一个选项,因为它是最简单的一个,但您的用例可能会有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.