通过基本的单元测试框架介绍(http://km.oa.com/group/viptest/articles/show/374474)和mock框架介绍(http://km.oa.com/group/viptest/articles/show/377938),能指引我们会写自己的单元测试了,最 近在给开发同学宣讲go单测时,交流过程发现开发同学特别关注如何写出好的单元测试,最近也在看业界大牛们的分享,结合实践过程理解,大致整理了下几个要点。
用断言来代替原生的报错函数
让我们看这样一个例子:
让我们看这样一个例子:即便我们很笃定 doSomeThing() 一定确定以及肯定能在 1 秒内完成,这个测试用例依然有很大可能在某个性能很差的容器上跑失败。除非我们就是在测试 Sleep 之类跟时间有关的函数,否则对时间的断言通常总是能被转化为跟时间无关的断言。一定要断言时间的话,断言超时比断言及时更不容易出错。
比如上面的例子,我们没办法断言它一定在 1 秒内完成,但是大概能断言它在 10 微秒内完不成。
尽量避免依赖外部服务
即使我们十分确信某个公有云服务是在线的,在 UT 中依赖它也不是一个好主意。毕竟我们的UT 不仅会跑在自己的开发机上,也会跑在一些沙盒容器里,我们可无法知道这些沙盒容器一定能访问到这个公有云服务。如果访问受限,那么测试用例就会失败。
要让我们的测试用例在任何情况下都能成功运行,写一个 mock 服务会是更好的选择。不过有些外部服务是必须依赖且无法 mock 的,比如测试数据库驱动时必须依赖具体的数据库服务,对于这样的情况,我们需要在开始 UT 之前设置好相应的环境。此时也有一些需要注意的地方,见下节:
优雅地实行前置和后置任务
为了设置环境或者为了避免测试数据污染,有时候有必要进行一定的前置和后置任务,比如在所有的测试开始的前后清空某个测试数据库中的内容等。
这样的任务如果在每个测试用例中都重复执行,那不仅是的代码冗余,也是资源的浪费。我们可以让 TestMain 来帮我们执行这些前置和后置任务:
长按指纹识别图中的二维码,获取更多测试干货分享!
将我们公众号置顶
不会漏掉我们的原创干货哦!