tidb源码学习之测试框架

tidb项目对测试非常重视,采用了大量的测试用例来保证代码的质量,目前代码测试的整体覆盖率在70%左右。

golang自带了测试框架,但tidb实际上使用的是gocheck的测试框架,这个框架兼容官方测试框架的用法。

测试框架介绍路径 gocheck有一些额外的优点,可以在使用过程中慢慢体会。

  • 强大的assert功能
  • 按test suite来组织测试用例,并支持setUp,tearDown
  • 一些便捷功能,如临时文件

下面介绍tidb在测试中一些有趣的用法。在tidb的测试用例里边会用到testkit和testleak两个工具包。

testkit

主要是提供一些便捷的工具,例如查询并检查错误,比较查询结果等,对照使用即可。

testleak

主要是提供了一个检测goroutine泄露的工具。使用很方便,只需要在开头加一个defer语句就可以了。原理也不复杂,就是通过runtime.Stack()得到所有正在运行的goroutine的堆栈,排除一些已知的堆栈,如果还剩下一些未知的,那可能就是有问题了。详细的可以看看tidb的源代码。