golang语言test文件编写基础

本文深入解析Go语言测试框架的关键特性,包括test文件的规范、测试用例的命名规则、依赖测试的解决方案,以及如何利用benchmark进行性能测试。强调了TestMain的作用和必要性,以及在测试中正确使用skip和error的重要性。

一、test文件注意事项

  1. 每个test文件必须import testing
  2. 每一个test case必须以Test开头且符合TestXxx形式(Test开头且接下来的第一个字母P大写),否则go test会直接跳过测试不执行
  3. 入参的类型必须为 t *testing.T (普通test)或b *testing.B(benchmark测试性能)
  4. 一般通过testXxx大小写区分开,让别的TestXxx调用子test
  5. t.Errorf为错误打印信息,并且当前整个test case会被跳过(go用assert机制做test处理)
  6. t.SkipNow()为跳过当前test,并且直接PASS处理下一个test,这必须放在某个test case的第一行才起作用
  7. 当多个test互相依赖时(比如test1的输出作为test2的输入):

go 的test不会保证多个TestXxx是顺序执行,但通常是顺序执行

解决方案:使用t.Run来执行subtests可以控制test输出以及test的顺序

  1. 使用TestMain作为初始化test,并且使用m.Run()来调用其他tests可以完成一些需要初始化操作的testing,比如数据库连接,文件打开,REST服务器登录等
  2. 如果没有在TestMain中调用m.Run()则除了TestMain以外的其他tests都不会被执行

 

二、Test之benchmark

  1. benchmark函数一般以Benckmark开头,入参是b *testing.B
  2. benchmark的case一般会跑b.N次,而且每次执行都会如此
  3. 在执行过程中会根据实际case的执行时间是否稳定增加b.N的次数以达到稳态,算出平均时间,所以永远不要让running time出现非稳态的效果,否则benchmark会跑不完。比如:这种情况下每次执行aaa函数时的时间是线性增长的,所以时间永远达不到一个稳定值,所以benchmark跑不完。
  4. Benckmark也是test case之一,所以同样受TestMain的限制。
  5. 当 go test –bench(加了-bench参数时,测试时只跑benchmark的case,其他case不会跑。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值