go单元测试及代码覆盖率

描述

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地址,欢迎相互沟通学习!

你可能感兴趣的:(Go)