单元测试知识总结

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

一、什么是单元测试?

单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类;单元测试属于最严格的软件测试手段,是最接近代码底层实现的验证手段,可以在软件开发的早期以最小的成本保证局部代码的质量。另外,单元测试都以自动化的方式执行,所以在大量回归测试的场景下执行单元测试,更能提高测试效率,另外,也可以帮助开发工程师改善代码的设计与实现。

代码的基本特征:

单元测试的对象是代码,代码的开发语言多种多样,程序的功能也千变万化,但是其基本特征还是顺序执行、条件分支、循环处理和函数调用等最基本的逻辑控制。

代码产生错误的原因:

如果有代码分类遗漏,就会产生缺陷;如果代码分类错误,也会产生缺陷;如果代码分类正确也没有遗漏,但是代码分类时的处理逻辑错误,也同样会产生缺陷。在具体的工程实践中,开发工程师为了设计并实现逻辑功能正确的代码,通常会有如下的考虑过程。

1、如果要实现正确的逻辑功能,会有哪几种正常的输入?
2、是否有需要特殊处理的多种边界输入?
3、各种非法输入的可能性有多大?如何处理?

这里,黑盒测试的“等价类”,这些开发工程师眼中的代码“功能点”,就是单元测试(白盒测试)的“等价类”。

二、单元测试用例

单元测试的用例是一个“输入数据”和“预期输出”的集合;测试人员需要针对确定的输入,根据逻辑功能推算出预期正确的输出,并且以执行被测试代码的方式进行验证。输入数据不仅仅是函数的入参,同样输出数据也不仅仅是函数的返回值那么简单。

输入数据:
        1、被测函数的输入参数;
        2、被测函数内部需要读取的全局静态变量;
        3、被测函数内部需要读取的成员变量;
        4、在函数内部调用子函数获得的数据;
        5、在函数内部调用子函数改写的数据;
        6、嵌入式系统中,在中断调用时改写的数据:
        。。。。。。

预期输出:
        1、被测函数的返回值;
        2、被测函数的输出参数;
        3、被测函数所改写的成员变量:
        4、被测函数所改写的全局变量;
        5、被测函数中进行的文件更新;
        6、被测函数中进行的数据库更新:
        7、被测函数中进行的消息队列更新:
        8、被测试函数中调用的其他函数:
        。。。。。。

三、驱动代码与桩代码

驱动代码指调用被测函数的代码;在单元测试中,驱动模块通常包括调用被测函数前的数据准备、调用被测函数以及验证结果三个步骤。
桩代码是用来代替真实代码的临时代码;如某个函数A调用一个尚未完成的函数B,为了对函数A的逻辑进行测试,模拟一个函数B,B就是桩代码。为了实现对A的全路径覆盖,需要控制不同测试用例中函数B的返回值。

桩代码的编写:
编写桩代码通常需要遵守的原则:

1、桩函数要具有与原函数完全相同的原型,仅仅内部实现不同,这样测试代码才能正确链接到桩函数。
2、用于实现隔离和补充的桩函数比较简单,只须保持原函数的声明,并加一个空的实现即可,目的是通过编译和链接。
3、实现控制功能的桩函数是应用最广泛的,要根据测试用例的需要,输出合适的数据作为被测函数的内部输入。

四、单元测试的自动化

单元测试阶段的“自动化”内涵不仅指测试用例执行的自动化,还包含以下方面:
        1、测试用例框架代码的自动生成;
        2、部分测试输入数据的自动生成;
        3、桩代码的自动生成;
        4、被测代码的自动静态分析;
        5、测试覆盖率的自动统计与分析;
        6、单元测试用例的自动执行。

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

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

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

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

相关文章

python爬虫笔记(一)

文章目录 html基础标签和下划线无序列表和有序列表表格加边框 html的属性a标签(网站)target属性换行线和水平分割线 图片设置宽高width,height html区块——块元素与行内元素块元素与行内元素块元素举例行内元素举例 表单from标签type属性pla…

【mysql】centOS7安装mysql详细操作步骤!—通过tar包方式

【mysql】centOS7安装mysql详细操作步骤! linux系统安装mysql版本 需要 root 权限,使用 root 用户进行命令操作。使用tar文件包,安装,gz包也可以但是还需要配置用户,tar包虽然大,但是全啊! 1. …

[新能源]新能源汽车快充与慢充说明

接口示意图 慢充接口为交流充电口(七孔),快充接口为直流充电口(九孔)。 引脚说明 上图给的是充电口的引脚图,充电枪的为镜像的。 慢充接口引脚说明 快充接口引脚说明 充电流程 慢充示意图 慢充&…

Android第二次面试总结(项目拷打理论篇)

(一)理论基础 LiveData 和 ViewModel 是 Android 架构组件中的重要部分,它们在构建响应式、生命周期感知的 Android 应用程序中发挥着关键作用。下面分别介绍它们的原理。 LiveData 原理 1. 概述 LiveData 是一种可观察的数据持有者类&…

MyBatis SqlSessionFactory 是如何创建的?

SqlSessionFactory 是 MyBatis 的核心接口之一,它是创建 SqlSession 实例的工厂。 SqlSession 实例是 MyBatis 与数据库交互的主要接口,负责执行 SQL 语句、管理事务等。 SqlSessionFactory 的创建过程主要由 SqlSessionFactoryBuilder 类负责。 SqlSes…

玩转python:通俗易懂掌握高级数据结构-collections模块之Counter

引言 Counter是Python中collections模块提供的一个强大工具,用于统计可哈希对象的出现次数。它非常适合用于频率统计、词频分析、数据聚合等场景。本文将详细介绍Counter的关键用法和特性,并通过8个丰富的案例帮助读者掌握其应用。 关键用法和特性表格 …

DeepSeek面试——分词算法

DeepSeek-V3 分词算法 一、核心算法:字节级BPE(Byte-level BPE,BBPE) DeepSeek-V3 采用 字节级BPE(BBPE) 作为核心分词算法,这是对传统 BPE(Byte Pair Encoding)算法的…

机器学习——正则化、欠拟合、过拟合、学习曲线

过拟合(overfitting):模型只能拟合训练数据的状态。即过度训练。 避免过拟合的几种方法: ①增加全部训练数据的数量(最为有效的方式) ②使用简单的模型(简单的模型学不够,复杂的模型学的太多&am…

Python:函数(一)

python函数相关的知识点 1. 函数定义与调用 定义:使用 def 关键字,后接函数名和参数列表。 def greet(name):"""打印问候语(文档字符串)"""print(f"Hello, {name}!") 调用&#xff1a…

关于Flutter中两种Widget的生命周期详解

目录 一、StatelessWidget 生命周期 二、StatefulWidget 生命周期 1. 创建阶段 2. State初始化阶段 3. 构建阶段 4. 更新阶段 5. 销毁阶段 三、核心对比与常见陷阱 四、面试回答技巧 以下是Flutter中两种核心Widget(StatelessWidget和StatefulWidget)生命周…

Linux 》》Ubuntu 18 LTS 之后的版本 修改IP地址 主机名

进入目录 /etc/netplan 修改 50-cloud-init.yaml 》保存文件后,执行以下命令应用更改: sudo netplan apply 》》 DHCP模式 修改主机名 hostnamectl set-hostname xxxx 修改cloud.cfg 防止重启主机名还原 但测试下来 不修改, 重启 也不会还…

C++基础 [三] - 面向对象三

初始化列表 首先,初始化列表是我们的祖师爷本贾尼博士为了解决在某些成员变量在定义时必须初始化的情况。这个初始化列表其实发生在构造函数之前,也就是实例化整个对象时先对所有的成员都进行了初始化 初始化的概念区分 在之前的博客学习中&#xff…

55年免费用!RevoUninstaller Pro专业版限时领取

今天,我要给大家介绍一款超给力的卸载工具——RevoUninstaller Pro。这是一款由保加利亚团队精心打造的专业级卸载软件,堪称软件卸载界的“神器”。 RevoUninstaller分为免费版和专业版。专业版功能更为强大,但通常需要付费才能解锁全部功能。…

目前人工智能的发展,判断10年、20年后的人工智能发展的主要方向,或者带动的主要产业

根据2025年的最新行业研究和技术演进趋势,结合历史发展轨迹,未来10-20年人工智能发展的主要方向及带动的产业将呈现以下六大核心趋势: 一、算力革命与底层架构优化 核心地位:算力将成为类似“新能源电池”的基础设施,…

【机器人】复现 ASGrasp 通用透明物体重建、6-DoF抓取预测

在机器人抓取领域,透明和镜面物体的抓取一直是个难题。 ASGrasp核心是两层学习型立体网络,能够同时恢复透明和镜面物体的可见部分和不可见部分的深度信息。 然后融合两层深度信息,进行重建物体,得到点云信息作为GSNet&#xff0…

2. qt写带有槽的登录界面(c++)

我们在1.Qt写简单的登录界面(c)_c qt 设计一个简单界面-CSDN博客中写了个简单的登录界面&#xff0c;但没有槽&#xff0c;在这里写一个带有槽的界面。 1.代码 代码目录如下&#xff1a; main.cpp的代码如下&#xff1a; #include "MainWindow.h" #include <Qt…

windows安装两个或多个JDK,并实现自由切换

我用两个JDK来做演示&#xff0c;分别是JDK8和JDK17(本人已安装JDK8&#xff0c;所以这里只演示JDK17的安装)。 1、下载JDK17安装 Java Downloads | Oracle 2、安装JDK17,这里忽略。直接双击软件&#xff0c;点击下一步就可以。 3、配置环境变量 在系统变量中新建一个CLASSP…

【2025最新】深度学习框架PyTorch——从入门到精通(1)下载与安装

又名&#xff1a;芜湖起飞侠的PyTorch学习记录——从起飞到坠毁 简介安装内容总览安装AnacondaAnaconda简介Anaconda下载配置环境变量验证其他配置安装matplotlib 安装 CUDA安装之前安装cuDNN 安装torchCPU 版本安装GPU 版本安装通过pip安装&#xff08;不推荐&#xff09;通过…

C++数据结构1——栈结构详解

一、栈的基本概念与特性 1. 栈的定义与特点 栈&#xff08;Stack&#xff09;是一种遵循后进先出&#xff08;LIFO, Last In First Out&#xff09;原则的线性数据结构&#xff0c;其核心特征包括&#xff1a; 单端操作&#xff1a;所有操作仅通过栈顶进行 动态存储&#xf…

【Python 数据结构 15.哈希表】

目录 一、哈希表的基本概念 1.哈希表的概念 2.键值对的概念 3.哈希函数的概念 4.哈希冲突的概念 5.常用的哈希函数 Ⅰ、直接定址法 Ⅱ、平方取中法 Ⅲ、折叠法 Ⅳ、除留余数法 Ⅴ、位与法 6.哈希冲突的解决方案 Ⅰ、开放定址法 Ⅱ、链地址法 7.哈希表的初始化 8.哈希表的元素插…