go代码覆盖测试
(金庆的专栏 2020.2)
假设应用名为 MyMod, 主函数的文件为 main.go, 那就创建如下的 main_test.go 文件:
package main
/* 测试整个服务器。
go test -c -covermode=count -coverpkg ./...
生成 MyMod.test.exe. 复制到 bin 目录下运行:
MyMod.test.exe --systemTest --test.coverprofile MyMod.cov
生成代码覆盖测试结果 MyMod.cov, 需要在 go.mod 管理的目录下执行
go tool cover -html=MyMod.cov -o MyMod.html
打开 MyMod.html 查看结果。
*/
import (
"flag"
"fmt"
"testing"
)
var systemTest *bool
func init() {
systemTest = flag.Bool("systemTest", false, "Set to true when running system tests")
}
// Test started when the test binary is started. Only calls main.
func TestSystem(t *testing.T) {
if *systemTest {
fmt.Println("Test system...")
main()
}
}
MyMod.cov 会积累,可加入 Git.
MyMod.cov 提交前,需对其排序,方便查看 diff.
排序脚本 sort_cov.bat 如下:
head -1 MyMod.cov > tmp.cov
cat MyMod.cov | sed '1d' | sort >> tmp.cov
cp tmp.cov MyMod.cov
del tmp.cov
pause