今天来讲一讲如何统计 go 代码的测试覆盖率,主要是 cover 命令。
cover 基本用法
1 先简单写个函数和相应的测试,代码如下:
func Max(a, b int) int {
if a > b {
return a
}
return b
}
这个函数就是简单的比较大小,如果 a > b,返回 a,否则返回 b。
测试代码如下
package main
import "testing"
func TestMax(t *testing.T) {
type args struct {
a int
b int
}
tests := []struct {
name string
args args
want int
}{
{
name: "a is larger than b",
args: args{
a: 2,
b: 1,
},
want: 2,
},
{
name: "b is larger than a",
args: args{
a: 1,
b: 2,
},
want: 2,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := Max(tt.args.a, tt.args.b); got != tt.want {
t.Errorf("Max() = %v, want %v", got, tt.want)
}
})
}
}
2 go test -cover 能够统计出代码测试的覆盖率,这是一种比统计函数是否被调用更强悍的手法。我们执行这个命令。输出如下:
PASS
coverage: 100.0% of statements
ok blog-test 0.265s
可以看到我们的测试覆盖率为 100%。
我们还可以对测试覆盖率进行可视化展示。通过以下命令:
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
可以识别和统计出未被测试覆盖的代码。
小结
本文主要讲解 go 如何统计代码测试覆盖率。除了通过命令行的方式,各个 IDE 都有相应的工具统计代码测试覆盖率。
在 GitHub 上, 有的开源项目使用了 Codecov 等工具结合 CI 来统计代码覆盖率。