开发小事:单元测试

517 阅读3分钟
原文链接: zhuanlan.zhihu.com

引言

单测是好多程序员的噩梦,会觉得是一种浪费时间的行为。但是真的事浪费时间吗?我们先不回答,可以先在脑中思考一下,接着往下看。

越早发现,成本越低

不知你是否已经发现,每当测试将BUG提给你的时候,会觉得很难去构造BUG出现的情况?你是否存在一种侥幸心理,觉得某一个BUG不会被测试人员发现?结局可想而知,埋头改,还被提了BUG票,得不偿失。

越早发现,成本越低。原因有四

  1. 越早,业务逻辑越清晰
  2. 越早,构造测试环境成本低
  3. 越早,对其他模块的影响越小,修改成本低(有些BUG存在连锁反应)
  4. 越早,测试人员会给亲,好评

你不是真正的讨厌

讨厌写单测这件事,往往讨厌的不是这件事本身,而是追求覆盖率和数据的构造。这两件事耗费了绝大数的时间。给开发者一种不值得的观念。如果这样是不是会好受呢?

  • 写完一个可测功能点,就编写单测

将单测时间进行分割,降低对编写单测这件事的厌恶,同时,就像上文所说,越早发现,成本越低。越早,对业务场景比较深刻,还有数据构造,往往有现成的纯数据。还有很重要被忽视的点,无论如何我们都是要对自己编写的代码进行测试的,为什么,不通过写单测进行测试呢。单测还可以对代码每次的修改,进行重复测试,反而,比肉测成本要来的低。

  • 先写一个Demo

我遇到一些同事说:“我不会写单测。”刚听到的时候,会觉得很可笑。事后想想,也觉得正常,万事开头难,如果有一个小样放在那里,心里也就会轻松一点。所以,写单测的时候,先写一个Demo。

这些你必须知道

写单测,还是有些需要注意的。

  • 每个Test Case点是一个单一变量测试

多个变化量值,会导致问题不可追溯。

  • 不能生产脏数据

测试往往涉及数据库和缓存等操作,不能因为单测,而造成数据的污染。可以通过H2等内存数据库和事务的回滚等方式解决这个问题。

  • 戒忌,不能为了覆盖率

为覆盖率写单测,那你就糊涂了,覆盖率只是一个结果,而不是目的。在这里扯一下,很多刚毕业的童鞋,会为了钱,跳来跳去,殊不知,把技术学好了,才是硬道理,才是目的。结果会在达到目的之后,顺其自然而来。单测的道理也是这样的。

后记

写本文的初心,不是为了说服你们一定要写单测,只是想告诉自己和你们,写单测这件事,不会让你后悔。