当前位置: 首页 > article >正文

单元测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快  

为什么需要单元测试?

从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需要相结合,但是缺乏了对产品研发细节(特别是代码细节的理解)。

从测试人员角度而言,功能测试和系统测试以及其他性能测试等等对测试人员的全局特性理解能力要求较高,只要测试人员能够掌握一两种自动化测试框架基本能够开展功能、性能自动化测试,但是借助于测试框架进行研发降低了测试人员对代码的掌握、理解要求。

从开发人员角度而言,用户需求往往并不是具体的、全面的,因此基于用户需求转换成开发文档或着针对某个功能编写开发代码往往也存在着局限性(也即我们常说的bug)。

因此,编写单元测试可以帮助测试人员更好地理解代码细节、提高代码开发能力,也能帮助开发人员提前辨识代码中可能存在的bug,提高代码的容错能力。

如何制定单元测试报告

良好的单元测试报告能够帮助测试人员更好地分析、挖掘潜藏的问题。那么,如何制定单元测试报告呢,从哪些维度出发呢?在这里我们主要从测试人员角度出发来思考这个问题。

首先,我们需要报告中能够呈现我们的测试用例数量和测试结果(pass或者fail),以及错误细节。

其次,从单元测试本身特点出发,我们需要报告中能够呈现出针对单元代码分支、单元方法等的覆盖率,更好地帮助我们梳理和测试用例设计的优良。

在此,我们使用surefire-report统计测试用例数量和测试结果,使用jacoco统计单元测覆盖率(注:本文默认测试用例的执行方式是mvn test)。

1.如何配置 surefire-report 和 jacoco ·surefire-report 配置

配置方法:配置 maven-surefire-plugin 插件,maven-surefire-plugin 是 maven 默认的 test

执行器,配置方法如下图所示:

上图中 testFailureIgnore 表示忽略单元测试中的错误继续构建,

<include>**/*Test.java</include> :表示任何子目录下所有命名以 Test 结尾的 Java 类,<exclude> **/Test*.java </exclude> :表示不执行任何子目录下所有命名以 Test 开头的Java 类。

执行方法:使用 mvn test surefire-report:report 即可,会生成在/target/site/surefire-report.html 测试报告文档。如下图所示:Tests 显示总用例数;Errors 指的是程序没有考虑到的情况,例如异常未能捕捉;Failure 指的是预期的结果与实际运行单元的结果不同所导致,常出现在断言处;Skipped 表示跳过的测试用例数;Success Rate表示用例成功率(=成功用例数/总用例数);Time 显示总耗时。Package List 显示详细的package 下用例执行结果。

jacoco 配置

配置方法:配置 jacoco-maven-plugin 插件,配置方法如下图所示,phase 表示插件运行的生命周期阶段。

执行方法:mvn test 执行即可。会在/target/site/jacoco/目录下生成总的覆盖率报告index.html 和不同 package 的单元测试覆盖率报告../xxx/index.html。此外还有 csv 和 xml格式的单元测试覆盖率报告。

如上图所示为某个 package 的单元测试覆盖率报告。红色进度条表未覆盖,绿色进度条表示已覆盖,Cov 为总体覆盖率。missed Instructions 表示代码覆盖率,Missed Branches表示逻辑分支覆盖率,Missed Cxty 表示判断执行数,missed Lines 表示代码行数,Methods表示方法个数。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。


http://www.kler.cn/a/370583.html

相关文章:

  • Navicat 17 功能简介 | 商业智能 BI
  • RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集
  • PCL 新增自定义点类型【2025最新版】
  • C++实现设计模式---外观模式 (Facade)
  • Lianwei 安全周报|2025.1.13
  • 50.【8】BUUCTF WEB HardSql
  • 语音语言模型最新综述! 关于GPT-4o背后技术的尝试
  • 安卓两个活动之间的消息传输(收到消息后基于应答)
  • 企业财务管理:从每刻到金蝶云星空的报销单集成案例
  • 实验03分支7-13 算术入门之加减乘除
  • 【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024)
  • HarmonyOS“一次开发,多端部署”
  • 即插即用篇 | YOLOv8 引入 空间和通道协同注意力模块 SCSA
  • 【计算机网络一】网络学习前置知识
  • 十四:Python学习笔记--基础知识完结(12)写几个案例 打包exe出来 齐活
  • 1.机器人抓取与操作介绍-深蓝学院
  • softmax回归简洁实现
  • Flutter Row组件实战案例
  • 软考:CORBA架构
  • 高效文本编辑与导航:Vim中的三种基本模式及粘滞位的深度解析
  • 【C++刷题】力扣-#448-找到所有数组中消失的数字
  • 关于整理EACO地球链500个问答0.1的建议,请用数字1-500列出来,谢谢20241028。
  • 使用Django框架开发企业级Web应用
  • NUUO网络视频录像机upload.php任意文件上传漏洞复现
  • 边缘计算网关在储能领域的应用-天拓四方
  • 【对比学习】正交阵/酉矩阵,对称矩阵/Hermite矩阵,正交相似对角化/奇异值分解的内在联系