一、test文件注意事项
- 每个test文件必须import testing
- 每一个test case必须以Test开头且符合TestXxx形式(Test开头且接下来的第一个字母P大写),否则go test会直接跳过测试不执行
- 入参的类型必须为 t *testing.T (普通test)或b *testing.B(benchmark测试性能)
- 一般通过testXxx大小写区分开,让别的TestXxx调用子test
- t.Errorf为错误打印信息,并且当前整个test case会被跳过(go用assert机制做test处理)
- t.SkipNow()为跳过当前test,并且直接PASS处理下一个test,这必须放在某个test case的第一行才起作用
- 当多个test互相依赖时(比如test1的输出作为test2的输入):
go 的test不会保证多个TestXxx是顺序执行,但通常是顺序执行
解决方案:使用t.Run来执行subtests可以控制test输出以及test的顺序
- 使用TestMain作为初始化test,并且使用m.Run()来调用其他tests可以完成一些需要初始化操作的testing,比如数据库连接,文件打开,REST服务器登录等
- 如果没有在TestMain中调用m.Run()则除了TestMain以外的其他tests都不会被执行
二、Test之benchmark
- benchmark函数一般以Benckmark开头,入参是b *testing.B
- benchmark的case一般会跑b.N次,而且每次执行都会如此
- 在执行过程中会根据实际case的执行时间是否稳定增加b.N的次数以达到稳态,算出平均时间,所以永远不要让running time出现非稳态的效果,否则benchmark会跑不完。比如:
这种情况下每次执行aaa函数时的时间是线性增长的,所以时间永远达不到一个稳定值,所以benchmark跑不完。 - Benckmark也是test case之一,所以同样受TestMain的限制。
- 当 go test –bench(加了-bench参数时,测试时只跑benchmark的case,其他case不会跑。
本文深入解析Go语言测试框架的关键特性,包括test文件的规范、测试用例的命名规则、依赖测试的解决方案,以及如何利用benchmark进行性能测试。强调了TestMain的作用和必要性,以及在测试中正确使用skip和error的重要性。
955

被折叠的 条评论
为什么被折叠?



