我们为什么需要单元测试?
想象一个使用了十多年的老旧系统,需要进行修改代码时,而负责修改的开发人员才刚接手不久,这种情况下,想必大多数人都不敢在原有代码上进行修改,因为经常改动了A处的代码,结果上线后发现相隔十万八千里的Z功能受到了影响。
为什么会出现这种情况?其本质原因是开发人员对系统代码掌握的不够吗?显然不是的。被多人二次开发的系统,往往风格不统一,内部调用关系错综复杂。我们需要一种手段,即可以一定层度上规范代码风格,更重要的是可以及早发现代码改动对功能造成的影响。
单元测试,正式这种手段,可以帮助开发及测试人员提高代码质量、更早地发现代码问题。
什么是单元测试
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围,并没有一个明确的标准,主要根据使用的语言而不通。如果你正在使用函数式编程,一个单元最有可能指的是一个函数。你的单元测试将使用不同的参数调用这个函数,并断言它返回了期待的结果;在面向对象语言里,下至一个方法,上至一个类都可以是一个单元,从一个单一的方法到一整个的类都可以是一个单元。
广义上的单元测试,有三个方面:
- 1.代码走读(Code review):观察代码的入参是否校验、算法是否正确、SQL语句、异常处理等等;
- 2.静态代码分析(Static analysis):带入假设的参数,推断代码是否能正常执行,分析结果是否正确;
- 3.动态代码分析(Dynamic analysis):通过编写测试脚本,真实调用被测试代码,来验证代码执行情况;
前两种都是主要靠人脑的,比较有限。所以我们在讨论单元测试时,大多指的是第三种动态代码的方式。动态代码不仅效率更高、结果更准确,并且可以长期保存、多次运行,可以在每次提交代码时都跑一边,测试验证新增功能的同时,还能对原有功能进行回归。
单元测试由谁做
有两个选项:开发