描述
Go语言官方则提供了语言级的单元测试支持,即testing包,而且仅通过go工具本身就可以方便地生成覆盖率数据,也就是说,单元测试是Go语言的自带属性,除了好好设计自己的单元测试用例外,开发者不需要操心工程搭建的任何细节。
逻辑代码
创建一个sum.go文件, 编写一下函数代码
// 求和
func Sum(a, b int) int{
return a + b
}
单元测试
进行代码的单元测试, 在sum.go文件同级目录下新建一个sum_test.go的测试文件
package sum
import (
"testing"
"fmt"
)
var sumTest = []struct{
a int
b int
prt int
}{
{10, 12, 22},
{1, 11, 12},
{14, 15, 29},
}
func TestSum(t *testing.T) {
for _, val := range sumTest {
if Sum(val.a, val.b)!= val.prt{
t.Error(errors.New("实际值与期望值不符!"))
}
}
}
- 导入testing包:testing包拥有执行Golang单元测试所需要的一切;
- 编写测试函数:所有测试函数都以Test开头,入参是testing.T类型的指针,在函数内调用被测函数,并对不符合预期的结果调用类似Error、Fatal的函数,其中前者在被调用后会打印出错信息,并继续执行后续用例,而后者则在打印信息后立即终止测试,一般仅在测试出现严重问题,无法继续进行后续用例测试时才需要调用类似Fatal的接口。
执行单元测试
go test // Golang执行单元测试的命令是go test,如果你在待测package所在的目录,则直接执行go test即可
go test -v // 不带任何参数的情况下,test仅输出最终的测试结果,如果要看到测试过程,可以指定-v参数,每个用例的执行成功与否,以及执行用时都会显示出来
go test -v path // 如果不在当前目录,则需要指定待测模块路径
代码覆盖率
指令:go test -v -coverprofile=cover.out
=== RUN TestSum
--- PASS: TestSum(0.00s)
PASS
coverage: 100.0% of statements
ok sum 0.009s
$ ll cover.out
-rw-rw-r-- 1 pirlo pirlo 1330 Jan 12 23:11 cover.out
生成html格式的覆盖率报告
指令:go tool cover -html=cover.out -o coverage.html
执行完毕会生成一个html文件, 直接打开浏览器浏览便可。
结束
最后友情链接有我的博客和github地址,欢迎相互沟通学习!