单元测试减少心智负担

单元测试减少心智负担


责任意识

  • 案例1: 错误的空判断,导致错误放款上百万;
  • 案例2: 使用本地环境打包,部署到线上环境后异常,官网无法访问;
  • 线上问题,第一责任人基本都是软件开发人员,不是测试、也不是运维人员;

什么是单元测试

  • 在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试  ,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
  • 通常来说,程序员每修改一次程序就会进行最少一次单元测试,在编写程序的过程中前后很可能要进行多次单元测试,以证实程序达到软件规格书要求的工作目标,没有程序错误;虽然单元测试不是必须的,但也不坏,这牵涉到项目管理的政策决定。
  • 每个理想的测试案例独立于其它案例;为测试时隔离模块,经常使用stubs、mock或fake等测试马甲程序。单元测试通常由软件开发人员编写,用于确保他们所写的代码符合软件需求和遵循开发目标。它的实施方式可以是非常手动的(透过纸笔),或者是做成构建自动化的一部分。

为什么要做单元测试

  • 保证功能的正确性;
  • 适应于代码改造、重构;
  • 对功能的一种文档记录(包括一次BUG,对应一个单元测试)
  • 从使用者的角度先行设计(参考——测试驱动开发TDD)
  • 收益
    • 更短的修复时间
    • 更少的开发成本
    • 更高的代码质量

哪些代码要做单元测试

  • 最理想,100%的代码覆盖率以及分支覆盖率。
    • 覆盖率好不等价于代码合格
  • 时间有限
    • 核心功能代码
    • 逻辑复杂的代码
    • 分支较多的代码
    • 数据状态变化较多的代码

怎么做单元测试

  • 从一个Java程序开始
  • 怎么做Spring容器的单元测试?
    • @SpringBootTest
  • 数据库数据怎么办?
    • @DbUnit

单元测试的建议

  • 日志或者System.out.println对测试无意义
  • 如依赖数据库,建议使用非测试数据库,并用spring-test-dbunit来做数据初始化准备。
  • 如依赖外部接口,建议有相应的测试接口,保证其接口输入与响应保持一致性
  • 了解一下测试驱动开发,能提高对代码可测试性、模块设计的理解。

参考


最后修改于 2022-06-15