2023.5.13-Go语言工程实践之测试:
测试分为三种测试,类似于金字塔形状。回归测试-集成测试-单元测试。由回归测试从上到下至单元测试,覆盖率逐层变大,成本逐层降低。 Go语言中的测试依赖go test命令。
1.单元测试-规则:
go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终的可执行文件中。
怎么整?简单来说,比如你要测试文件名叫"payment.go",那你就在后面加上"_test"使其变成"payment_test.go",接着,里面的测试函数写"func TestPayment(t *testing.T){}",接着再写一个主函数"func TestMain(m *testing.M){}"。然后把初始化逻辑放进TestMain里,例如你测试前要配上数据库初始化啊,redis初始化那些东西,然后你就弄进去。最后把测试后(释放资源等收尾工作)写进去,没了,就这么简单。
2.单元测试-代码覆盖率:
单元测试里怎么衡量测试水准或已经达到了高水准的测试水平呢?于是代码覆盖率就出现了。代码覆盖率分为一般覆盖率(50%-60%)和较高覆盖率(80%以上),如果你的代码覆盖率有80%以上,那就说明测试水准很不错。 测试分支相互独立且全面覆盖。测试单元粒度足够小,函数单一职责。
3.单元测试-依赖:
每个单元去调用外部资源例如文件,数据库和缓存的叫做外部依赖。因此,我们要保证这些外部依赖要保持稳定性和幂等性,稳定性指这个单元中各个函数要求稳定运行。幂等性的话就是在同一个时间刻进行相同的操作只会执行一次功能,例如在5s内点了3次登录,只会触发第1次的登录,剩下的2次则无效。所以保证这两个特性是很有必要的,否则会出现无法预估的错误。