Go单元测试(一): 基本用法

来自公众号:灰子学技术 原文链接

一、单元测试的基本规则介绍

Go的单元测试比较容易实现,因为Go语言为我们提供了单元测试的框架。而对于单元测试的框架需要遵循下面的几条规定。

规则1.单元测试代码的go文件必须以_test.go结尾,Go语言测试工具只认符合这个规则的文件

规则2.单元测试的函数名必须以Test开头,是可导出公开的函数。备注:函数名最好是Test+要测试的方法函数名

规则3.测试函数的签名必须接收一个指向testing.T类型的指针作为参数,并且该测试函数不能返回任何值

规则1: 

例子:单元测试文件不是以_test.go结尾命名的情况。

$ go test    // 备注,ut目录下只有main.go和maintest.go的时候,会显示下面的提示

?  _/Users/XXXX/ut [ no test files ] // 执行结果,显示没有测试文件被发现。

规则2:

例子:测试函数不是以Test开头

go test 会提示 告警: testing: warning: no tests to run

二、如何运行一个单元测试

单元测试代码如下所示:

main.go    + main_test.go

$ go test -v -cover 

介绍:

// -v, 显示单元测试的详细信息,

// -cover会显示测试代码的覆盖率

// go test显示的UT测试结果,以及花费的时间

三、表格驱动测试方法:

如果一个函数的逻辑分支很多,将会导致测试这个函数的测试用例非常多,然而这些测试用例绝大部分函数都是类似的。对于这种情况,表格驱动法(Table Driven)便可以发挥作用了。

下面用一个例子来介绍如何使用表格驱动法:

$ go test table_test.go table.go -v

表格驱动测试一般会用到三个步骤:

1.定义测试结果验证对应的数据结构。
2.构造测试函数对应的几种测试场景。
3.循环调用被测函数,并进行校验。

备注:

以上介绍的只是单元测试的最基本测试知识,实际工程中的单元测试要比这复杂很多,很多。尤其是一个模块中的函数依赖与其他模块或者第三方库等的接口内容,这种情况下,我们在做单元测试的时候,就需要stub和mock这些需要依赖的函数。(这部分知识会在后续章节进行介绍。)

欢迎关注,一个记录C++程序员学习Go语言的公众号,灰子学技术: