1.概述

测试是开发过程的重要部分,也是软件开发生命周期的关键部分。 它可以确保应用程序正常运行和满足客户需求。 本文将涵盖关于 Go 测试的所有须知事项。 我们将从一个简单的测试函数开始,通过更多工具和策略帮助您掌握 Go 中的测试。

在一个流程规范的项目里,如果想发布一行代码到生产环境,都需要完整的测试流程,如果是向外网发布一个功能或版本,那么更需要进行完整的功能测试,其中就包括白盒测试和黑盒测试。尤其是在游戏行业,因为玩法逻辑复杂,很多逻辑很难考虑到,因此覆盖率验证是一个必备的一个流程。比如现在的团队就要求放出的游戏版本的代码覆盖率需要达到100%才算是达到发版标准,因此覆盖率测试在保证代码质量上扮演者重要角色。我们通过覆盖率可以看到我们的代码有哪些是已经跑到的,有哪些是特殊情况绕过了尚未验证,因此通过代码覆盖率我们可以对整个代码逻辑有充分的认识和判断。这篇文章主要介绍如何对Go的代码建立覆盖率,而Go的覆盖率建立依赖go test和go tool cover。

2.编写单元测试代码

每个模块跟一个test代码:


package utils

import "testing"

func TestBtoI(t *testing.T) {
	b := true
	i := BtoI(b)
	if i != 1 {
		t.Errorf("error")
	}

	b = false
	i = BtoI(b)
	if i != 0 {
		t.Errorf("error")
	}
}

模块以_test结尾;函数以Test开头;输入参数是t *testing.T

3.覆盖率测试

进入项目的根目录,

go test -cover -covermode=count --coverprofile=coverage.out即可:

 qicycle@qicycledeMacBook-Pro-3 mage-erp % go test -cover -covermode=count --coverprofile=coverage.out ./model  ./controller ./handler
?   	mage-erp/model	[no test files]
ok  	mage-erp/controller	0.026s	coverage: 2.0% of statements
ok  	mage-erp/handler	0.021s	coverage: 3.1% of statements

可以看到输出了coverage百分比,我这个项目没啥测试代码,临时增加的。

4.覆盖率测试可视化分析

对刚才生成的coverage.out 进行可视化分析:

go tool cover -html=coverage.out

可以看到打开了一个网页:

左边可以选择对应的go文件,右边有列出来cover到的代码,绿色是cover的,红色是没有cover的

这样对项目跑一遍就知道覆盖率的多少了。

 

5.遇到的问题

5.1 如何对指定目录进行计算代码覆盖率

go test -cover -covermode=count --coverprofile=coverage.out ./model ./controller ./handler ./server ./lib

5.2 go tool cover --html=coverage.out只列出部分go文件

那是因为没有对应测试文件的go文件是不会列出来的