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

一、什么是单元测试?

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围,并没有一个明确的标准,“单元”可以是一个函数、方法、类、功能模块或者子系统。

单元测试通常和白盒测试联系到一起,如果单从概念上来讲两者是有区别的,不过我们通常所说的“单元测试”和“白盒测试”都认为是和代码有关系的,所以在某些语境下也通常认为这两者是同一个东西。还有一种理解方式,单元测试和白盒测试就是对开发人员所编写的代码进行测试。

提示:概念这个东西大概理解是什么意思即可~

在这里插入图片描述

二、单元测试谁来做?

想一想:前面我们介绍了,单元测试简单理解就是对开发人员所编写的代码进行测试,既然和代码相关我们第一感觉那应该是“开发人员来做”;再一看单元测试包含“测试”两个字,那么“测试人员来做”也应该是合理的吧。

单元测试一般是有开发人员或测试人员来做。谁来做并没有一个绝对的标准,要根据公司的实际情况来决定。接下来我们分析一下开发人员或测试人员做单元测试的优缺点:

开发人员做单元测试:

优点:开发人员对代码最熟悉,而且开发人员编程技能相对比较强,所以开发人员自己写单元测试效率上和覆盖率上都比较高

缺点:开发人员平时写业务代码就要花费很多时间,有时候确实没有时间写单元测试;而且大部分开发人员没有太好的测试思想,单元测试可能只是写个最简单的用例就完了;自己写的代码自己测,往往都是不靠谱!

测试人员做单元测试:

优点:测试人员有比较系统的测试思想,可以更好地保证用例的覆盖。而且通过写单测测试能更好地了解具体代码结构、流程,对于后续的业务测试也非常有利。

缺点:测试人员的编程技能相对比较弱,如果不同编程是无法开展单元测试的。并且测试人员对代码没有开发人员熟悉,效率会比较低。

图片

三、单元测试怎么做?

动态执行跟踪:就是把程序代码运行起来,检查实际的运行结果和预期结果是否一致

人工静态检查

人工静态检查包含的主要内容:

动态执行跟踪

动态执行跟踪需要编写测试脚本调用业务代码进行测试,为了更好的管理维护测试脚本,一般会采用单元测试框架来管理,不同的语言有不同的单元测试框架:

单元测试的一个重要的衡量标准就是代码覆盖率,尽量做到代码的全覆盖。常见单元测试覆盖标准:

入门示例:针对开发人员编写的实现计算操作的方法进行单元测试

# 开发人员编写的业务代码
class CalUtil:"""计算器"""@staticmethoddef add(x, y):"""加法"""return x + y@staticmethoddef sub(x, y):"""减法"""return x - y@staticmethoddef mul(x, y):"""乘法"""return x * y@staticmethoddef div(x, y):"""除法"""return x / y
# 单元测试脚本
import unittest
from test_ut.cal import CalUtilclass TestCal(unittest.TestCase):def test_add_01(self):# 测试数据x = 1y = 2expect = 3# 调用被测方法result = CalUtil.add(x, y)print(f"result={result}")# 断言self.assertEqual(expect, result)def test_add_02(self):# 测试数据x = 1y = -1expect = 0# 调用被测方法result = CalUtil.add(x, y)print(f"result={result}")# 断言self.assertEqual(expect, result)# ...

单元测试基本等同于白盒测试。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:
http://www.pswp.cn/web/94829.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94829.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94829.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL【应用 04】加解密扩展 pgcrypto 使用实例(加密、导出、导入、解密流程说明)

加解密扩展 pgcrypto 使用实例1.需求说明2.工具说明2.1 环境说明2.2 插件添加3.实例分析3.1 测试数据3.2 进行加密3.3 数据导出3.3.1 Navicat 导出3.3.2 copy 命令导出3.4 数据解密3.4.1 Navicat 导入3.4.2 copy 导入3.5 坑1.需求说明 从内网导出敏感数据的时候,对…

SDK、JDK、JRE、JVM的区别

SDK、JDK、JRE、JVM的区别一、SDK二、JDK三、JRE四、JVM五、JDK、JRE、JVM三者关系图一、SDK SDK(Software Development Kit,程序软件开发工具包),可以认为jdk只是sdk的一种(子集),而当提及jav…

如何启动一个分支网络改造试点?三步走

在多云化、全球化的今天,企业的分支网络早已不仅仅是“能连”的问题。视频会议卡顿、ERP 响应延迟、跨境访问不稳、合规风险增大……这些都让 CIO 和 IT 负责人越来越清楚:分支网络改造是数字化的必修课。但是,面对几百甚至上千个分支机构&am…

四,设计模式-原型模式

目的原型模式的产生是为了解决一个问题,即复制对象时对被复制对象所属类的依赖。当需要复制一个对象时,需要遍历对象中的所有成员并进行复制,但存在一些问题:某些成员对象可能是私有的无法访问。同时要复制某个对象,那…

(笔记)Android窗口管理系统分析

概述 Android窗口管理系统是Android UI框架的核心组件,负责管理所有应用窗口的显示、布局、层级、焦点和输入事件分发。WindowManagerService(WMS)作为系统服务,协调Surface、Activity、View等组件,为用户提供流畅的界…

WebIDEPLOY 技术支撑草莓数字产业链的构建逻辑与实践路径—— 草莓智能育苗系统实践应用分析

一、WebIDEPLOY 技术与草莓产业数字化的适配逻辑WebIDEPLOY 技术以 “低门槛接入、全链路协同、数据驱动” 为核心特征,其底层架构可精准对接草莓产业链的碎片化需求。通过零代码设备接入模块,能快速整合育苗棚传感器、种植区智能设备、销售端数据平台等…

汽车电气系统的发展演进为测试带来了哪些影响?

随着汽车智能化进程加速,车辆电气系统方案持续演进。为满足日益严格的功能安全要求,主机厂逐渐引入智能配电、冗余配电等新型方案,这给电气系统的测试环节带来了显著影响。智能配电测试何为智能配电?下图分别展示了传统电气架构以…

Rocky9配置完VMware桥接模式后没有自动获取IP

现象如下:查看网卡状态: nmcli dev status可以看到ens160存在,但是disconnected查看已有连接配置: nmcli con show可以看到连接配置也在重启NetworkManager systemctl restart NetworkManager激活网卡 sudo nmcli con up "en…

Unity List 相关

顺序复制同类型的List①list2 new List<T>(list1);②list2.Clear(); list1.ForEach(item > list2.Add(item));倒序复制同类型的Listlist2 new List<T>(list1);//顺序复制 list2.Reverse();//颠倒list乱序复制同类型的ListList<T> list2 new List<T&…

网络安全测试(一)Kali Linux

Kali Linux 是一款专为网络安全测试、渗透测试和白帽黑客设计的 Linux 发行版&#xff0c;预装了大量安全测试工具。以下是其核心工具的分类及代表性工具介绍&#xff1a; 一、信息收集工具 用于获取目标网络、主机或系统的基础信息。 Nmap&#xff1a;网络扫描工具&#xff0…

go grpc使用场景和使用示例

Go gRPC 使用场景 微服务架构中的服务间通信&#xff1a;在微服务架构中&#xff0c;不同的服务之间需要高效、可靠地进行通信和数据交换&#xff0c;gRPC 可以很好地满足这一需求。需要高并发、低延迟通信的场景&#xff1a;gRPC 基于 HTTP/2 协议&#xff0c;支持多路复用和头…

6.8 学习ui组件方法和Element Plus介绍

学习 UI 组件库的核心是 “文档 实践 深入”。从官方文档入门&#xff0c;通过构建真实项目来巩固和深化理解&#xff0c;适时探索源码以提升认知。同时&#xff0c;掌握按需引入、主题定制、插槽等关键技术&#xff0c;并保持对性能、可访问性和最佳实践的关注。记住&#x…

MongoDB和Mysql比较

MongoDB与MySQL深度对比:选择适合你的业务的数据存储方案 在当今数据驱动的时代,选择合适的数据库系统对应用性能、开发效率和业务扩展性至关重要。作为数据库领域的两大巨头,关系型数据库的代表MySQL和文档型NoSQL的代表MongoDB,常常成为开发者面临的选择。本文将从数据模…

LoRA modules_to_save解析及卸载适配器(62)

LoRA modules_to_save解析及卸载适配器 modules_to_save解析 PEFT 模型中卸载适配器 在需保存模块列表中,还可以添加什么 modules_to_save解析 还有一个配置参数可用于指定你希望保持 “活跃且可训练” 的层列表 —— 也就是说,这些层会被设为可训练状态。更便捷的是,你无需…

分支多、云也多,网络又慢又烧钱?一套方案全搞定!

随着企业云化和全球化步伐加快&#xff0c;多云、混合云已成为常态&#xff0c;而非选择。随之而来的是网络架构的复杂性与日俱增&#xff1a;分支越来越多&#xff0c;应用越来越散&#xff0c;链路越来越杂。IT部门不仅要保障关键应用的体验&#xff0c;还要应对跨境合规、成…

centos7安装java mysql redis nginx

1.安装java8(百度) yum install java-1.8.0-openjdk.x86_64 [rootcanteen jar]# yum install java-1.8.0-openjdk.x86_64 yum install java-1.8.0-openjdk-devel.x86_64 查java版本&#xff1a; [rootlocalhost ~]# java -version openjdk version "1.8.0_372" Op…

【STM32】G030单片机的窗口看门狗

一、简单介绍窗口看门狗适合需要精确时序控制的场合&#xff0c;在一个受限的窗口期内喂狗&#xff0c;如果递减计数器还没有到窗口值就喂狗&#xff0c;会触发复位如果一直不喂狗&#xff0c;也会触发复位&#xff0c;和之前的独立看门狗的窗口选项有点类似需要指出的是&#…

完整代码注释:实现 Qt 的 TCP 客户端,实现和服务器通信

一、实验效果演示 实现 Qt 的 TCP 客户端&#xff0c;实现和服务器通信二、代码框架 三、代码 tcpclient客户端代码 tcpclient.cpp #include "tcpclient.h" #include "ui_tcpclient.h" #include <QDebug> #include <QMessageBox> #include …

AR培训系统:油气行业的安全与效率革新

在油气行业&#xff0c;一场由增强现实&#xff08;AR www.teamhelper.cn &#xff09;技术引领的培训革命正在悄然发生。新员工们不再需要冒着生命危险在真实的钻井平台上学习操作&#xff0c;而是通过AR眼镜在虚拟环境中模拟钻井、起下钻甚至处理井喷等复杂操作。这种创新的培…

Linux 多线程:互斥与同步

Linux 多线程中的互斥与同步 —— pthread_mutex 与 semaphore在 Linux 多线程编程中&#xff0c;线程间共享全局变量或数据结构是常见场景。如果多个线程同时读写同一块内存&#xff0c;就可能产生 数据竞争 和 不一致。为了解决这些问题&#xff0c;Linux 提供了多种 线程同步…