在许多程序员眼中,单元测试彷佛是无关紧要的,以为这应该是测试人员的工做。实际上,测试代码和生成代码一样重要。咱们不但须要测试代码,并且须要的是整洁的测试代码。程序员
测试为何要整洁web
咱们对待测试代码须要像对待生产代码同样,写以前须要进行严谨的思考、详细的设计。这里分享一下我本身的学习编程的一些经历。编程
没有单元测试微信
刚毕业的时候,个人代码能够说是年少轻狂,老是对本身充满自信。根本就不写单元测试,写完以后自测也是随意的点两下就算自测经过了。代码提交测试后,恐怖的事情就出现了,铺天盖地的bug向我袭来。天天工做有一半以上的时间是在和测试同事沟通,其他的时间是在改bug。原本1天的工做可能须要3天才能完成。当我意识到这样作彻底是费力不讨好的时候,我决心每次写完代码以后,要写一段单元测试,保证单元测试经过后再提交。编辑器
随意的单元测试单元测试
在开始写单元测试以后,个人工做效率提升了不少,下班都比原来早了。感受写单元测试是一个无比正确的决定。随着项目的进行,中间处理过几回紧急的bug fix,当时就没有顾上去写单元测试。然而,当我又一次完成一个新的feature的时候,像往常同样开始跑单元测试,结果是:Failed!就是由于以前的改动致使的。因为手里还有其余比较紧急的工做,单元测试又被放下了。就这样,我又回到了没有单元测试的工做状态。学习
如今的我已经不像当初那样盲目的自信了,没有单元测试的代码让我感到恐慌。测试
决心重构单元测试flex
曾经有一段可用的单元测试放在我面前,但我没有珍惜,直到失去才追悔莫及。此次我决心重建单元测试,不但要重建,还要写一段好的单元测试。吸收上次的教训,要使个人单元测试可扩展,可维护。把一些公共的方法抽取出来,将不一样概念的测试进行拆分。作到“每一个概念一个测试”,测试中须要使用断言判断是否成功,而不是人为查看日志。每一个测试都要包含构造-操做-检验三个环节,这三个环节要定义清楚。url
这样一来,我就有了一套整洁的单元测试,后来修改代码后,单元测试能够方便的进行扩展和复用,工做效率再次提高。
整洁测试的规则
整洁测试须要遵循F.I.R.S.T规则。什么是F.I.R.S.T规则呢?
快速(Fast)
测试应该足够快,若是测试一次须要等待很长时间,没有人愿意频繁的运行测试,也就没办法快速发现问题。长此以往,咱们又会失去测试……
独立(Independent)
测试之间应该相互独立,一个测试的失败不该该影响其余的测试,不然就会致使每次测试出现一大堆问题,咱们每次只能解决最上级的测试暴露出来的问题,下级测试须要再次测试才行。这就会大大下降工做效率。
可重复(Repeatable)
测试应该在各类环境中能够重复执行,不管是你的本地环境,测试环境仍是生产环境。测试都应该可以跑通。这样才能保证线上的质量,测试也才有意义。
自足验证(Self-Validating)
测试应该有布尔值输出(最好使用断言),咱们不该该经过查看日志来判断测试是否经过,更不该该经过人为比较两个文本是否相同来判断测试是否经过。这样不但失去了测试的准确性,也浪费了咱们本身的时间。
及时(Timely)
测试应该及时编写,在设计生产代码的同时就应该将测试一并设计好,否则的话,当你写好生产代码,也许会由于某些代码难以测试而放弃。
结语
总结一下今天讨论的内容,咱们须要整洁的单元测试,它的地位与生产代码同样,须要咱们认真设计。设计测试的时候须要遵循F.I.R.S.T原则。
若是以为文章不错的话,就帮忙点个赞或者转发一下吧。

本文分享自微信公众号 - 代码洁癖患者(Jackeyzhe2018)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。