使用go test -v -coverprofile=cover.out xxx_test.go xxx.go执行测试用例对xxx进行测试可以在相同的目录生成cover.out文件,这个文件中记录了test对go文件的代码覆盖情况。
可以使用go tool cover -html=cover.out -o=tag.html命令生成html文件,其中不同颜色标识覆盖情况。那么问题来了:我需要统计代码的覆盖情况为数组,某行被覆盖用1标识,否则为0。我总不能去检查html的颜色吧???
找了半天没找到对cover.out文件的解析。不过找到一篇cover工具的原理:http://www.51testing.com/html/37/n-3726337.html
参考这个,先生成了被gocover重写后的源码文件,然后人工取比较,终于发现了cover.out中参数的含义:
路径\dnn.go:14.39,15.19 1 1
其中go:一个分支开始的行.?,分支结束的行.? ? 是否被执行到1/0
?标识还不了解什么意思
不过对于统计代码行是否被覆盖而言到此已经足够了,将最后标志位1的首尾代码行号标记取出来视为被覆盖就ok拉!
要查看go文件中函数覆盖率的统计,使用go tool cover -func=cover.out命令可以直接将cover.out文件按函数统计,输出go中函数的覆盖情况。
后记:name.go:line.column,line.column numberOfStatements count