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

单元测试实战

文章目录

    • 为什么要做单元测试?
    • 单元测试的几个核心要点是:
    • 单元测试目标
    • 单元测试框架
      • JUnit
      • TestNG
    • 单元测试工具:

为什么要做单元测试?

测试代码:通过编写和运行单元测试,开发者能够快速验证代码的各个部分是否按照预期工作,有利于保证系统功能的正确可用,这是单元测试的核心作用。
改进代码:编写单元测试的过程中,开发者能够再次审视业务流程和功能的实现,更容易发现一些代码上的问题。比如将复杂的模块进一步拆解为可测试的单元。
利于重构:如果已经编写了一套可自动执行的单元测试代码,那么每次修改代码或重构后,只需要再自动执行一遍单元测试,就知道修改是否正确了,能够大幅提高效率和项目稳定性。
文档沉淀:编写详细的单元测试本身也可以作为一种文档,说明代码的预期行为。

单元测试的几个核心要点是:

最小化测试范围:单元测试通常只测试代码的一个非常小的部分,以确保测试的简单和准确。
自动化:单元测试应该是自动化的,开发人员可以随时运行它们来验证代码的正确性,特别是在修改代码后。而不是每次都需要人工去检查。
快速执行:每个单元测试的执行时间不能过长,应该尽量做到轻量、有利于频繁执行。
独立性:每个单元测试应该独立于其他测试,不依赖于外部系统或状态,以确保测试的可靠性和可重复性。

单元测试目标

新模块中核心代码单元测试覆盖率80%??
新模块中整体单元测试覆盖率60%??

单元测试框架

JUnit

JUnit是一个为Java编程语言设计的开源单元测试框架,由 Kent Beck 和 Erich Gamma建立,它是单元测试框架家族中的一个,这些框架被统称为xUnit,JUnit是xUnit 家族中最为成功的一个。JUnit 有它自己的 Junit 扩展生态圈,多数 Java 的开发环境都已经集成了 JUnit 作为单元测试的工具。JUnit 的最新版本是JUnit 5,它不再是一个单一的JAR 包,而是由JUnit platform(平台)、JUnit Jupiter 和JUnit Vintage 这3 部分组成。
官网地址:JUnit 5

<!-- junit mvn 配置 待补充 -->

TestNG

TestNG 是另一个为Java编程语言设计的开源单元测试框架,是一个受JUnit和NUnit启发而来的测试框架,但它引入了一些新功能,使其更强大、更容易使用,例如:

  • 核心特性是多线程测试执行,测试代码是否是多线程安全的;
  • 提供注释支持;
  • 支持数据驱动测试(使用@DataProvider);
  • 支持参数化测试;
  • 强大的执行模型(不再有TestSuite);
  • 支持各种工具和插件(Eclipse, IDEA, Maven等…);
  • 嵌入BeanShell以获得更多的灵活性;
  • 用于运行时和日志记录的默认JDK函数(没有依赖关系)。

官网地址:https://testng.org/

<dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>7.8.0</version>
</dependency>

单元测试工具:

单测生成&单测覆盖率统计工具:

  1. Idea的TestMe插件
  2. Squaretest

参考:
软件测试/测试开发 | TestNG 与 Junit 对比,测试框架如何选择?
TestNG和Junit的区别
2021年软件测试工具总结——单元测试工具
【好物推荐】一款帮我快速达成单元测试的覆盖率指标的IDEA插件 —— TestMe
idea单元测试覆盖率提升插件

相关文章:

  • devops使用
  • 为实体服务器配置Ubuntu
  • 【IO】IO模型与零拷贝
  • html table+css实现可编辑表格
  • 理解SpringMVC的工作流程
  • 【宇宙猜想】AR文创入驻今日美术馆、北京天文馆等众多展馆,在AR互动中感受科技魅力!
  • 软件工程快速复习(期末急救)
  • 国内前十大连锁酒店集团之一『东呈集团』商城项目启动,企企通赋能酒店管理集团采购数字化
  • 软件工程期末复习
  • SpringMVC系列之技术点定向爆破一
  • 怎么实现Servlet的自动加载
  • Hive-数据模型详解(超详细)
  • 【Linux】进程查看|fork函数|进程状态
  • 技术阅读周刊第十一期
  • CSDN-2023年度总结:岁月如故
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 5、React组件事件详解
  • Angular 2 DI - IoC DI - 1
  • create-react-app做的留言板
  • CSS魔法堂:Absolute Positioning就这个样
  • FastReport在线报表设计器工作原理
  • happypack两次报错的问题
  • JS 面试题总结
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • MobX
  • php中curl和soap方式请求服务超时问题
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 分享一份非常强势的Android面试题
  • 工作手记之html2canvas使用概述
  • 普通函数和构造函数的区别
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 数据科学 第 3 章 11 字符串处理
  • 物联网链路协议
  • 原生 js 实现移动端 Touch 滑动反弹
  • 《天龙八部3D》Unity技术方案揭秘
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​iOS安全加固方法及实现
  • ​决定德拉瓦州地区版图的关键历史事件
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #、%和$符号在OGNL表达式中经常出现
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (12)Linux 常见的三种进程状态
  • (a /b)*c的值
  • (HAL库版)freeRTOS移植STMF103
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)程序员技术练级攻略
  • (轉貼) UML中文FAQ (OO) (UML)
  • ***监测系统的构建(chkrootkit )
  • *ST京蓝入股力合节能 着力绿色智慧城市服务