Martin Fowler有一本很出名的书《重构》,里面有个很出名的概念,Code Smell。前阵子我也刚发现一本很好的书,《XUnit Test Patterns》。这本书主要讲的是如何重构测试代码,这里的测试代码指的就是自动化测试的代码,再进一步细化就是单元测试为主的自动化测试代码的重构。由于此书已经让清华大学翻译烂了……所以建议大家下载英文版。
所谓的测试的坏味道,有三种:
- 项目(Project)
- 行为(Behavior)
- 代码(Code)
按照《重构》书中提出的坏味道的概念来看,如果说是有坏味道(Smell),那么大多数都是指代码级别的。什么的坏味道?就是程序有可能会有大问题的一种征兆(symptom)。个人理解就是不能被直接观察到的现象,可以称之为坏味道。
对于自动化测试代码来说,如果有了项目级的坏味道,通常变现就是生产环境出现了BUG。如果出现这样的情况,那么自动化测试代码就不是有味道那么简单了,而是有问题了,自动化测试的安全网没有能够抓住这个BUG。
而行为的坏味道,其中一个表现形式就是我以前写过的在自动化测试中需要避免“诡异”的测试脚本提到的现象。还有诸如编译错误、不能被重复运行的测试等。其实如果我们碰到行为级别的坏味道,那么可以肯定,我们必须要修改它。如果不修复好这些问题,自动化测试根本无法进行。
代码的坏味道,这个才是我们需要注意的问题,因为代码有了坏味道,并不代表着自动化测试代码会运行出错,通常人们是不会去修改没有出错的代码,人之常情。发现测试代码的味道,并且去修复它,会让我们的自动化测试更加健壮。《XUnit Test Patterns》这本书的前言部分给出一个典型的例子来说明单元测试代码中有哪些坏味道,如何去修改。例子中的一些对单元测试的重构方法,我在平时的工作中也应用到了,不过看完了以后真是觉得裨益良多,虽然做了快一年的单元测试,集成测试,但是却没有停下来总结一年中学到了什么,真的要借着读这本书的机会,好好总结。
最近在接回以前的一些测试项目,个人觉得如果测试代码里面不写注释,这样也是一种坏味道。对于一堆测试代码,半年后可能都忘记了当初为什么这样写,尤其是对于没有注释的测试代码。就像我在译言翻译的第一篇文章里面说的那样,“很多时候,你就是注释的第一位受益者,或者受害者”。对于有坏味道的自动化测试代码,你可以让他继续发酵,腐烂,总有一天,你自己要收拾这个残局。