golang单元测试用法
单元测试文件名必须是
XXX_test.go
然后引用
testing
这个包
然后每个测试函数名必须是以
TestXXX
开头
左侧会有绿色箭头,说明这个单元测试的函数是可以运行的
测试结果
单元测试函数必须要有
testing
的参数,否则会报错
错误信息:
看这个单元测试
运行结果是
fail
t.SkipNow
()为跳过当前
test
,并且直接按
PASS
处理继续下一个
test
这个
t.SkipNow()
必须写在测试函数的第一行,否则不起作用
运行结果:
多个单元测试的执行顺序
Go
的
test
不会保证多个
TestXxx
是顺序执行,但是通常会按顺序执行
这个时候我们可以使用
t.Run
来执行
subtests
可以做到控制
test
输出以及
test
的顺序
看下面的示例:
这个时候运行所有的
test
运行结果:
然后把上面的单元测试改为小写的
t
运行
TestAll
单元测试,可以运行两个子单元测试,并且可以控制执行顺序,运行结果:
TestMain
使用
使用
TestMain
作为初始化
test
,并且使用
m.Run
()来调用其他
tests
可以完成一些需要初始化操作的
testing
,比如数据库连接,文件打开,
REST
服务登录等
如果没有在
TestMain
中调用
m.Run
()则除了
TestMain
以外的其他
tests
都不会被执行
加了这个主测试函数
如果不加
m.Run
()就只会执行
TestMain
这个函数
运行结果:
添加
m.Run
方法后就会先执行
TestMain
测试函数,然后会继续执行其他的单元测试
运行结果:
犀牛代理IP
Benchmark
用法
Benchmark
也是单元测试的一种,这个函数主要是测试代码的性能
测试函数必须要
Benchmark
开头,并且参数是
testing.B
的指针类型
测试结果
在每次运行这个测试函数的时候,每回的
n
的数值是不断变化的,来满足对性能测试的要求
所以不要修改
n
的值,否则不断变的
n
值,测试函数会不断调整这个
n
值,来满足对性能测试的要求
看下面的示例:
被测试的函数中的
n
值在不断变化,导致测试函数中的
n
也在不断变化,最后的结果就是在不断调整
n
的值来满足性能的测试,所以就会一直在测试,没有结果输出
测试结果: