6.单元测试
作者:互联网
一、什么是单元测试
- 单元测试是一个软件开发过程,其中应用程序的最小可测试部分(称为单元)被单独和独立地审查(审查)以确保正常运行。
- 单元是软件设计的最小单位
- 软件单元必须与程序的其他部分分开并独立测试。
- 一个单元,一个特定的函数或一个类方法,还有一个模块或一小组模块
- 在 Java 中,一个单元是一个类或一个类方法。
- 在 C 中,一个单元是一个函数或子进程。
单元测试的基本属性
- 清除功能
- 规格定义
- 清晰的接口定义
单元测试的目的
- 验证代码是否与设计一致
- 跟踪需求和设计的实现
- 发现设计和需求之间的错误
- 发现编码过程中引入的错误
注意
- 目标:确保模块正确编码
- 依据:详细规格
- 流程:经过设计、脚本开发、实现、调试、分析结果的一个流程
- 执行人员:由程序开发人员和测试人员共同完成。
- 测试方法:主要采用白盒测试,辅助黑盒测试方法
- 如何评估:通过所有单元测试用例,没有严重的代码缺陷。
单元测试的过程
- 在详细设计阶段完 成单元测试计划
- 建立单元测试环境,完成测试设计和开发
- 执行单元测试用例, 并且详细记录测试结果
- 判定单元测试是否 通过
- 提交单元测试报告
好处
- 单元测试的目标是隔离程序的每个部分,并表明各个部分是正确的。
- 单元测试提供了一段代码必须满足的严格的书面约定。
- 单元测试在开发周期的早期发现问题。
单元测试的分类
-
静态测试
-
它主要是代码的语法检查和/或手动检查代码或文档以查找错误。
-
编写代码的开发人员可以单独使用这种类型的测试。
-
编码标准和规格说明:如C++编码规范
-
代码评审review:
- 走查Walkthroughs
- (正式会议)审查inspections
-
-
动态测试
二、单元测试策略
- 存根/桩(Stub):用于模拟被测模块工作过程中调用的模块。 通常他们只处理很少的数据。
- 驱动模块(Driver module):用于模拟被测模块的上级模块。 它接收测试数据,传输与被测模块相关的信息,启动被测模块并打印相应的结果。
- 自顶向下的单元测试策略
先测试顶层,将顶层调用的单元作为存根,然后测试第二层,依次将测试过的单元作为驱动模块。 - 自下而上的单元测试策略
先测试底层模块,为其设置驱动模块,然后测试上层模块,依次将测试过的模块作为存根。 - 隔离测试
不考虑模块之间的关系,每个模块的设计子和驱动模块。
三、单元测试分析
单元测试阶段关注的5个方面:
四、单元测试准则
- 保持单元测试小而快
- 单元测试应该是完全自动化和非交互的
- 使单元测试易于运行
- 测量测试
- 立即修复失败的测试
- 保持单元级别的测试
- 从简单开始
- 保持测试独立
- 让测试靠近被测试的类
- 正确命名测试
- 测试公共API
- 考虑黑匣子
- 考虑白盒
- 也测试琐碎的情况
- 首先关注执行覆盖率
- 覆盖边界情况
- 提供随机生成器
- 测试每个功能一次
- 使用显式断言
- 提供阴性测试
- 设计代码时考虑到测试
- 不要连接到预定义的外部资源
- 了解测试成本
- 优先测试
- 为失败准备测试代码
- 编写测试来重现错误
- 了解局限性
五、怎样使用Junit
- 单元测试工具
单元测试通常使用白盒测试的方法。
单元测试工具根据不同的语言有其对应的版本。
典型工具 - xUnit 系列:
– JUnit —— Java
– CppUnit —— C++
– NUnit —— C# ( .Net )
——……
标签:测试,代码,单元测试,存根,模块,单元 来源: https://blog.csdn.net/AIbeichen/article/details/121767904