第2章 单元测试简介
一般情况下,测试工作分为单元测试、集成测试、验收测试。单元测试是粒度最细的测试,即对程序的单个模块进行测试。第1章已经介绍了单元测试的来龙去脉,分析了为什么要进行单元测试。本章从理论层面进一步分析如何进行单元测试。
2.1 单元测试的范围
如果要给单元测试定义一个明确的范畴,指出哪些功能是属于单元测试,这似乎很难。但下面讨论的四个问题,基本上可以说明单元测试的范畴,以及单元测试所要做的工作。
1.模块代码的行为和我期望的一致吗?这是单元测试最根本的目的,我们就是用单元测试的代码来证明模块代码所做的就是我们所期望的。
2.模块代码的行为一直和我期望的一致吗?编写单元测试,如果只测试代码的一条正确路径,让它正确走一遍,并不算是真正的完成。软件开发是一项复杂的工程,当测试某段代码的行为是否和你的期望一致时,你需要确认:在任何情况下,这段代码是否都和你的期望一致,譬如参数很可疑、硬盘没有剩余空间、缓冲区溢出,以及网络掉线的时候。
3.我可以信赖单元测试吗?不能信赖的代码是没有多大用处的。既然单元测试是用来保证代码的正确性,那么单元测试也一定要值得信赖。
4.单元测试说明我的意图了吗?单元测试能够帮我们充分了解代码的用法,从效果上而言,单元测试就像是能执行的文档,说明了在你用各种条件调用代码时,你所能期望这段代码完成的功能。
针对这些问题,这里我们整理了单元测试所需要覆盖的内容。
1.结果:确认被测单元的运行结果满足需求。
2.边界条件:找边界条件是做单元测试中最有价值的工作之一,因为缺陷经常出现在边界上。
3.路径:对基本执行路径和循环进行测试会发现大量的错误。根据白盒测试和黑盒测试用例设计方法设计测试用例。设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。
4.局部数据结构测试:模块的局部数据结构是最常见的错误来源,应设计测试用例以检查一下各种错误。
5.强制错误:进行各类异常测试,保证程序的健壮性。比如,内存耗光、网络不可用等情况。
6.性能特性:验证被测单元满足性能要求。