最近领导布置了写单元测试的任务,覆盖度要达到80%,那覆盖度如何算呢,为嘛写了单测覆盖度还那么低?

首先了解下如何查看单测覆盖度

1、查看前先生成单测的覆盖文件

go test -v -race $(go list ./... |grep -v /cmd |grep -v /vendor) -coverprofile=coverage.out

2、查看各个函数的覆盖度与总覆盖度

2.1、直接输出各个文件下的各个函数的覆盖度与总覆盖度

go tool cover -func=coverage.out

2.2、如果不想直接输出,而是写到文件:

go tool cover -func=coverage.out -o coverage.data

3、如何查看具体代码行的覆盖情况

2.1 通过浏览器 html 文件查看

# 下面生成的html可以再浏览器打开,查看具体代码行的覆盖 go tool cover -html=coverage.out -o coverage.html


2.2 通过go-carpet 命令查看

# 查看函数的覆盖情况 go-carpet -func=GetServerPollV2 ./ # 查看文件的覆盖情况 go-carpet -file=models/common.go # go-carpet 下载地址 # https://github.com/msoap/go-carpet/releases/



4、如何不让非重要的或者废弃的代码逻辑影响整体覆盖度

# coverage.out 每行有具体目录和文件名,先排除掉 cat coverage.out |grep -v /demo.go | grep -v /demo/ > new_coverage.out go tool cover -func=new_coverage.out