Go语言精进之路读书笔记第41条——有层次地组织测试代码
聚焦位于测试包内的测试代码该如何组织
41.1 经典模式—平铺
测试函数各自独立,测试函数之间没有层级关系,所有测试平铺在顶层
41.2 Unit家族模式
测试套件(Test Suite)和测试用例(Test Case)
41.3 测试固件
测试固件是一个人造的、确定性的缓解,在这个环境中进行测试,测试结果是可重复的
一般使用setUp和tearDown来表示测试固件的创建/设置与销毁/拆除
- Go 1.14版本testing包增加来testing.Cleanup方法,为测试固件的销毁提供了包级别原生的支持
- Go 1.4版本引入了TestMain,使得包级别测试固件的常见和销毁有了正式的施展舞台
常见场景:
- 将一组已知数据加载到数据库中,测试结束后清除这些数据
- 复制一组特定的文件,测试结束后清除这些文件
- 常见伪对象(fake object)或模拟对象(mock object),并为这些对象设定测试时所需的特定数据和期望结果
总结:
- 简单的测试可采用平铺模式
- 复杂的测试可借鉴xUnit的最佳实践,利用subtest建立包、测试套件、测试用例三级的测试代码组织形式,并利用TestMain和testing.Cleanup方法为各层次的测试代码建立测试固件