go语言提供了对测试的支持。在go的标准库文档中的testing包页面,对go语言的测试方法有较为详细的使用说明,这里仅仅对go语言的测试进行简单说明。
1.使用概述
使用go语言的测试功能,需要在以_test.go结尾的文件中编写测试函数。文件中需要引入testing包。最后,使用go test命令执行测试。
测试函数形式如下:
func TestXxx(*testing.T) {
//具体执行步骤
}
其中Xxx是任意字母和数字。
Xxx第一个字母不能是小写字母。可以理解是如果是小写字母,不能识别开头的Test。
函数形参testing.T是执行单元测试的参数,基准测试的参数是testing.B
这里主要以单元测试为例
2.go test的使用
go test 命令的具体用法可以使用go help test命令详细了解。
使用的形式为
go test [build/test flags] [packages] [build/test flags & test binary flags]
如果[packages]为空,会默认执行当前目录所在包的_test.go 文件
指定[packages]的形式如'go test math', 'go test ./...'
也可以指定具体的_test.go文件。格式如
go test ./go_test.go
指定具体文件的时候,似乎只会返回结果(测试是否pass等等),不会有其他输出(包括标准输出)。加上-v后正常。
3.go test 常用flag
具体的flag可以运行go help testflag查看
挑选几个常用的大概了解下
-cover //开启覆盖率分析
-run //后面接正则表达式,只运行与该正则表达式匹配的测试函数。可以用来指定具体某个函数运行
-list //后面接正则表达式,列出匹配的函数。单元测试的函数不会执行
-v //详细输出,testing.T的log等函数,在测试通过的时候不展示日志,加上-v,无论成功与否,都会显示
-timeout //超时时间。默认10分钟(10m),如果为0,没有超时
4.testing包
4.1 testing.T
用于单元测试
这里仅列一下常用方法,详细说明看标准库文档
func (c *T) Log(args ...interface{})
func (c *T) Logf(format string, args ...interface{})
//日志
//如果允许结果成功,不展示。
//可以使用-v 使go test 的日志在成功的时候也输出
func (c *T) Fail() //将当前测试标识为失败,但是仍继续执行该测试。
func (c *T) FailNow() //将当前测试标识为失败,该测试函数不再往下执行(其他Test函数还执行)
没有断言,可以使用上面两个方法替代。
func (c *T) Error(args ...interface{})
func (c *T) Errorf(format string, args ...interface{})
//相当于执行Log后执行Fail
func (c *T) Fatal(args ...interface{})
func (c *T) Fatalf(format string, args ...interface{})
//相当于执行Log后执行FailNow
参考资料
testing pkg doc
有疑问加站长微信联系(非本文作者)