有没有人成功地为 Go 单元测试生成代码覆盖率?我在网上找不到这样的工具。
请注意,Go 1.2(2013 年第四季度,rc1 可用)现在将显示 测试覆盖率结果 :
一个主要的新特性go test是 它现在可以计算并在一个新的、单独安装的“go tool cover”程序的帮助下显示测试覆盖率结果。 该cover工具是子存储库的go.tools一部分。它可以通过运行安装 $ go get golang.org/x/tools/cmd/cover 封面工具做了两件事。 首先,当“ go test”被赋予-cover标志时,它会自动运行以重写包的源代码并插入检测语句。然后像往常一样编译和运行测试,并报告基本的覆盖率统计信息: $ go test -coverprofile fmtcoverage.html fmt ok fmt 0.060s 覆盖率:91.4% 的语句 $ 其次,对于更详细的报告,“go test”的不同标志可以创建一个覆盖率配置文件,go tool cover然后用“”调用封面程序可以分析该文件。 最新版本的 Go (2013/09/19) 使用: go test -coverprofile <filename> <package name> 可以通过运行命令找到有关如何生成和分析覆盖率统计信息的详细信息 $ go help testflag $ go tool cover -help
一个主要的新特性go test是 它现在可以计算并在一个新的、单独安装的“go tool cover”程序的帮助下显示测试覆盖率结果。
go test
go tool cover
该cover工具是子存储库的go.tools一部分。它可以通过运行安装
cover
go.tools
$ go get golang.org/x/tools/cmd/cover
封面工具做了两件事。
-cover
$ go test -coverprofile fmtcoverage.html fmt ok fmt 0.060s 覆盖率:91.4% 的语句 $
最新版本的 Go (2013/09/19) 使用:
go test -coverprofile <filename> <package name>
可以通过运行命令找到有关如何生成和分析覆盖率统计信息的详细信息
$ go help testflag $ go tool cover -help
go test -coverprofile cover.out然后在您的默认浏览器中 go tool cover -html=cover.out打开cover.out 我什至不想等待浏览器打开,所以我定义了这个别名: alias gc=grep -v -e " 1$" cover.out 我只需键入gc,并列出尚未涵盖的所有行 ( 此处:coverage.out一行 不 以“ 1”结尾)。
go test -coverprofile cover.out然后在您的默认浏览器中 go tool cover -html=cover.out打开cover.out
go test -coverprofile cover.out
go tool cover -html=cover.out
cover.out
我什至不想等待浏览器打开,所以我定义了这个别名:
alias gc=grep -v -e " 1$" cover.out
我只需键入gc,并列出尚未涵盖的所有行 ( 此处:coverage.out一行 不 以“ 1”结尾)。
gc
coverage.out
1
2022 年更新,可能适用于 Go 1.19
提议:扩展 Go 的代码覆盖测试以包括应用程序 虽然go test将继续支持现有的基于 ” ” 的覆盖工作流,但建议将覆盖添加为 ” go build” 的新构建模式。 就像用户可以使用“”构建一个带有竞争检测器的可执行文件一样go build -race,也可以使用“”构建一个带有覆盖率的可执行文件go build -cover。 将支持合并在不同 GOOS/GOARCH 环境中生成的覆盖配置文件。
虽然go test将继续支持现有的基于 ” ” 的覆盖工作流,但建议将覆盖添加为 ” go build” 的新构建模式。
go build
就像用户可以使用“”构建一个带有竞争检测器的可执行文件一样go build -race,也可以使用“”构建一个带有覆盖率的可执行文件go build -cover。
go build -race
go build -cover
将支持合并在不同 GOOS/GOARCH 环境中生成的覆盖配置文件。