上一章讲到“为什么要写单元测试这一章我们讲讲“单元测试在整个测试体系中的位置”
单元测试是软件测试体系中的一员。
1. 软件测试的类别
软件测试主要有以下这些类别:
单元测试。对底层代码的每个工作单元进行测试。通常涉及一个类的一个公开方法。白盒测试。细粒度。
集成测试。中等粒度的测试。对多个类之间的协作或与外部系统的交互以完成某项内部功能进行测试。涉及多个类的交互。白盒测试。中等粒度。
功能测试。粗粒度的测试。针对系统的每个用例(对客户或用户有用的功能)进行测试。黑盒测试。粗粒度。
性能和负载测试。测试系统的性能和吞吐量等。黑盒测试。
验收测试。从用户界面开始对整个系统进行测试验收,检验系统是否已经准备就绪,可以部署生产。
在上图中,金字塔从下往上分别是单元测试、服务测试(相当于我们上面分类中的功能测试)和用户界面测试(相当于我们上面分类中的验收测试)。测试金字塔说明:
- 越是底层的测试,测试的数量越多;越是上层的测试,测试的数量越少。单元测试的测试量是最大的。每个工作单元都需要编写测试。实际上每个工作单元通常都需要写多个测试,以保证对各种可能条件进行全面测试覆盖。
- 越是底层的测试,越需要能够快速执行。上层的测试则允许更长时间完成。所有的单元测试都应该能够在毫秒级时间内完成。
- 越是底层的测试,越需要隔离依赖项。越高层的测试,越需要集成更多的真实依赖项。底层的单元测试,要对一切依赖项(系统中的其他类和外部系统)进行隔离和模拟;而上层的测试需要集成系统中其他的类、子系统和外部系统,进行联合测试。
3.各种测试不可相互取代
各种测试之间不可相互代替。例如,单元测试用于保证最底层的每个工作单元的正确性(零件的正确性),集成测试用于保证多个类协作完成高阶目标(内部功能)的正确性(组装的正确性)。作为技术人员,我们肯定要首先保证每个零件没问题,然后也要保证这些零件组装起来后能够完成某项期待的功能。
单元测试作为最基础的测试,其重要性不可言喻。下层基础不牢靠,上层建筑就会风雨飘摇。如果只有集成测试,没有单元测试。那么当集成测试失败之后,你就无法确定是零件导致的失败,还是组装导致的失败。定位和修复bug就需要消耗大量的成本。如果已经有单元测试保证零件的正确性,当集成测试失败时,我们就可以肯定是组装的问题,而不是零件的问题,从而可以以较低的成本定位和修复bug。
下一章将讲讲“单元测试的常见错误观念和做法”!
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92511 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!