单元测试减少心智负担
单元测试减少心智负担
责任意识
- 案例1: 错误的空判断,导致错误放款上百万;
- 案例2: 使用本地环境打包,部署到线上环境后异常,官网无法访问;
- 线上问题,第一责任人基本都是软件开发人员,不是测试、也不是运维人员;
什么是单元测试
- 在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试 ,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
- 通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后很可能要进行多次单元测试,以证实程序达到软件规格书要求的工作目标,没有程序错误;虽然单元测试不是必须的,但也不坏,这牵涉到项目管理的政策决定。
- 每个理想的测试案例独立于其它案例;为测试时隔离模块,经常使用stubs、mock或fake等测试马甲程序。单元测试通常由软件开发人员编写,用于确保他们所写的代码符合软件需求和遵循开发目标。它的实施方式可以是非常手动的(透过纸笔),或者是做成构建自动化的一部分。
为什么要做单元测试
- 保证功能的正确性;
- 适应于代码改造、重构;
- 对功能的一种文档记录(包括一次BUG,对应一个单元测试)
- 从使用者的角度先行设计(参考——测试驱动开发TDD)
- 收益
- 更短的修复时间
- 更少的开发成本
- 更高的代码质量
哪些代码要做单元测试
- 最理想,100%的代码覆盖率以及分支覆盖率。
- 覆盖率好不等价于代码合格
- 时间有限
- 核心功能代码
- 逻辑复杂的代码
- 分支较多的代码
- 数据状态变化较多的代码
怎么做单元测试
- 从一个Java程序开始
- 怎么做Spring容器的单元测试?
- @SpringBootTest
- 数据库数据怎么办?
- @DbUnit
单元测试的建议
- 日志或者System.out.println对测试无意义
- 如依赖数据库,建议使用非测试数据库,并用spring-test-dbunit来做数据初始化准备。
- 如依赖外部接口,建议有相应的测试接口,保证其接口输入与响应保持一致性
- 了解一下测试驱动开发,能提高对代码可测试性、模块设计的理解。
参考
- 单元测试 - 维基百科,自由的百科全书 (wikipedia.org)
- 从头到脚说单测——谈有效的单元测试 (qq.com)
- 关键词
- 测试开发
- JUnit, xUNit, dbUnit
- SpringBooTest
- Mock, spy, stub
最后修改于 2022-06-15