6.单元测试

一、什么是单元测试

  • 单元测试是一个软件开发过程,其中应用程序的最小可测试部分(称为单元)被单独和独立地审查(审查)以确保正常运行。
    • 单元是软件设计的最小单位
    • 软件单元必须与程序的其他部分分开并独立测试。
    • 一个单元,一个特定的函数或一个类方法,还有一个模块或一小组模块
      • 在 Java 中,一个单元是一个类或一个类方法。
      • 在 C 中,一个单元是一个函数或子进程。

单元测试的基本属性

  • 清除功能
  • 规格定义
  • 清晰的接口定义

单元测试的目的

  • 验证代码是否与设计一致
  • 跟踪需求和设计的实现
  • 发现设计和需求之间的错误
  • 发现编码过程中引入的错误

注意

  • 目标:确保模块正确编码
  • 依据:详细规格
  • 流程:经过设计、脚本开发、实现、调试、分析结果的一个流程
  • 执行人员:由程序开发人员和测试人员共同完成。
  • 测试方法:主要采用白盒测试,辅助黑盒测试方法
  • 如何评估:通过所有单元测试用例,没有严重的代码缺陷。

单元测试的过程

  1. 在详细设计阶段完 成单元测试计划
  2. 建立单元测试环境,完成测试设计和开发
  3. 执行单元测试用例, 并且详细记录测试结果
  4. 判定单元测试是否 通过
  5. 提交单元测试报告

好处

  • 单元测试的目标是隔离程序的每个部分,并表明各个部分是正确的。
  • 单元测试提供了一段代码必须满足的严格的书面约定。
  • 单元测试在开发周期的早期发现问题。

单元测试的分类

  • 静态测试

    • 它主要是代码的语法检查和/或手动检查代码或文档以查找错误。

    • 编写代码的开发人员可以单独使用这种类型的测试。

    • 编码标准和规格说明:如C++编码规范

    • 代码评审review:

      • 走查Walkthroughs
      • (正式会议)审查inspections
      image-20211109203324164
  • 动态测试

二、单元测试策略

  • 存根/桩(Stub):用于模拟被测模块工作过程中调用的模块。 通常他们只处理很少的数据。
  • 驱动模块(Driver module):用于模拟被测模块的上级模块。 它接收测试数据,传输与被测模块相关的信息,启动被测模块并打印相应的结果。
image-20211109203528818
  • 自顶向下的单元测试策略
    先测试顶层,将顶层调用的单元作为存根,然后测试第二层,依次将测试过的单元作为驱动模块。
  • 自下而上的单元测试策略
    先测试底层模块,为其设置驱动模块,然后测试上层模块,依次将测试过的模块作为存根。
  • 隔离测试
    不考虑模块之间的关系,每个模块的设计子和驱动模块。

三、单元测试分析

单元测试阶段关注的5个方面:

image-20211109203725428

四、单元测试准则

  1. 保持单元测试小而快
  2. 单元测试应该是完全自动化和非交互的
  3. 使单元测试易于运行
  4. 测量测试
  5. 立即修复失败的测试
  6. 保持单元级别的测试
  7. 从简单开始
  8. 保持测试独立
  9. 让测试靠近被测试的类
  10. 正确命名测试
  11. 测试公共API
  12. 考虑黑匣子
  13. 考虑白盒
  14. 也测试琐碎的情况
  15. 首先关注执行覆盖率
  16. 覆盖边界情况
  17. 提供随机生成器
  18. 测试每个功能一次
  19. 使用显式断言
  20. 提供阴性测试
  21. 设计代码时考虑到测试
  22. 不要连接到预定义的外部资源
  23. 了解测试成本
  24. 优先测试
  25. 为失败准备测试代码
  26. 编写测试来重现错误
  27. 了解局限性

五、怎样使用Junit

  • 单元测试工具
    单元测试通常使用白盒测试的方法。
    单元测试工具根据不同的语言有其对应的版本。
    典型工具 - xUnit 系列:
    – JUnit —— Java
    – CppUnit —— C++
    – NUnit —— C# ( .Net )
    ——……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值