软件测试之单元测试详解

🍅 视频学习:文末有免费的配套视频可观看

🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快

一、什么是单元测试?

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

代码的基本特征:

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

代码产生错误的原因:

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

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、单元测试用例的自动执行。

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

花了2万多买的自动化测试全套教程,现在分享给大家,入门到精通,全程干货无废话(软件测试全栈教程))

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

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

相关文章

「AI作曲家」Suno 使用 v3 在几秒钟内创作完整的两分钟歌曲

Suno 被誉为“音乐界的 ChatGPT”,它的独特之处在于能够根据简单的提示,自主创作包括歌词、人声和配器在内的完整音乐作品。更令人惊叹的是,你可以引导它精确地选择任何想要的音乐风格,从古老的三角洲蓝调到现代的电子寒潮,它还能灵活运用各种方言。 Suno 正在开启一个全…

【学习笔记】java项目—苍穹外卖day01

文章目录 苍穹外卖-day01课程内容1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 产品原型2.3 技术选型 3. 开发环境搭建3.1 前端环境搭建3.2 后端环境搭建3.2.1 熟悉项目结构3.2.2 Git版本控制3.2.3 数据库环境搭建3.2.4 前…

1-java运算符试题

一、选择题(10个) 下列哪个是Java中的赋值运算符? A. B. - C. D. * 答案:C对于表达式a 5; b 10; a b * 2,其结果是? A. 15 B. 20 C. 25 D. 30 答案:C下列哪个符号表示短路逻辑与&#xff…

使用certbot为网站启用https

1. 安装certbot客户端 cd /usr/local/bin wget https://dl.eff.org/certbot-auto chmod ax ./certbot-auto 2. 创建目录和配置nginx用于验证域名 mkdir -p /data/www/letsencryptserver {listen 80;server_name ~^(?<subdomain>.).ninvfeng.com;location /.well-known…

【Linux】 centos7安装卸载SQL server(2017、2019)

一、安装配置 准备一个基础Linux配置&#xff1a; 内存为20GB 运行内存为2GB的系统&#xff08;数据库小于2GB安装不了&#xff09; 1、网络配置 我们需要进行网络的连接 进入 cd /ect/sysconfig/network-script/ 编辑文件ifcfg-ens33 vi ifcfg-ens33 Insert键进行编辑 把ONBOO…

2024最新Win系统下VSCode下载安装与配置C/C++教程

2024最新Win系统下VSCode下载安装与配置C/C教程 文章目录 2024最新Win系统下VSCode下载安装与配置C/C教程1、下载安装VSCode2、安装运行时环境GCGC的环境配置 3、安装VSCode插件4、配置程序调试环境4.1确定文件存储路径4.2新建文件夹【.vscode】4.3在.vscode文件夹里新建四个配…

学透Spring Boot — [二] Spring 和 Spring Boot的比较

欢迎关注我们的专栏 学透 Spring Boot 一、创建一个简单Web应用 本篇文章&#xff0c;我们将会比较 Spring 框架和 Spring Boot 的区别。 什么是 Spring? 也许你在项目中已经可以很熟练的使用 Spring 了&#xff0c;但是当被问到这个问题时&#xff0c;会不会犹豫一下&#…

轻松赚钱,精彩生活:上班族副业赚钱新攻略大揭秘!

薪水总是捉襟见肘&#xff0c;每月账单总让人倍感压力。你是否曾在静谧的夜晚&#xff0c;躺在床上&#xff0c;思索如何为家庭多赚一分钱&#xff1f;其实&#xff0c;你并不孤单。在这个充满机遇与挑战的时代&#xff0c;越来越多的人开始寻找副业&#xff0c;以期望让生活更…

QT控件之显示控件

Qt Designer显示窗口部件提供的面板中&#xff0c;提供了10种显示小部件 &#xff08;1&#xff09; Label标签 &#xff08;2&#xff09; Text Browser文本浏览器 &#xff08;3&#xff09; Graphics View图形视图 &#xff08;4&#xff09; Calendar Widget日历 &…

『大模型笔记』混合专家模型(Mixed Expert Models,简称 MoEs)

混合专家模型(Mixed Expert Models,MoE) 文章目录 1. 什么是混合专家模型?2. MoE的PyTorch示例代码2.1. 代码图示2.1. 理解torch.std2.1.1. 参数介绍2.1.1. 基本例子2.1.1. 矩阵的例子2.1.1. 用作损失的一部分3. MoE优缺点4. 参考文章

【Bug-ModuleNotFoundError: No module named ‘models‘】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 出现这个错误&#xff1a; 出现了ModuleNotFoundError: No module named models’的问题。 文件在Model…

【操作系统复习之路】操作系统概述(复习的同学有福啦)

长话短说&#xff0c;就记下笔记&#xff0c;期待期末90&#xff0c;随便希望能帮助到有需要的同学。 目录 一、操作系统的目标和作用 二、操作系统的发展过程 2.1 无OS 2.2 有OS 【1】批处理系统 【2】分时系统 【3】实时操作系统 【4】三种基本操作系统的比较&#…

域环境共享文件夹,容量配额管理

首先&#xff0c;我们先创建一个新的磁盘&#xff0c;必须在服务器关机的状态下创建&#xff0c;只有在关机状态下才能创建NVMe类型的磁盘。 打开此电脑&#xff0c;右击创建的磁盘&#xff0c;点击属性。 点击共享&#xff0c;点击高级共享。 将共享此文件夹勾选上&#xff0c…

【PSINS工具箱】无时间戳时,IMU数据解算与绘图(带源码)

背景 遇到一个例子&#xff0c;在IMU没有时间戳时&#xff0c;先根据采样周期&#xff08;或采样频率&#xff09;将时间戳补齐&#xff0c;然后再进行解算的程序。 要求&#xff1a;输入的imu信息前6列分别为&#xff1a;3列角速度、3列加速度。 程序源码 % 基于PSINS工具箱…

从代码到可执行到运行的整体流程与原理

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言 本篇文章将会介绍&#xff0c;磁盘中是如何存储一个文件&#xff0c;磁盘中的文件是如何从磁盘中加载进内存&#xff0c;与进程又有怎样的关系&#xff0c;我们写的代码变成可执行程序执行起来时如何完成对文件的一系列…

LLM: Prompt的使用

本文使用的LLM是OpenAI的gpt系列。刚开始学大模型&#xff0c;如果出现错误内容或着描述不恰当的部分&#xff0c;后续会修改。 Prompt是输入给大模型的文本或语句&#xff0c;用来引导大模型(Large Language Model, LLM)生成相关的输出。好的prompt可以提高大模型输出的准确性…

ubuntu系统下如何使用vscode编译和调试#小白入门#

编程环境&#xff1a;ubuntu系统为18.04.1&#xff0c;vscode版本为1.66.2 一、VSCode切换中文显示&#xff1a; 1、vscode安装完成后启动,在左侧externsions中搜索“简体中文”插件&#xff0c;并完成安装&#xff1a; 2、选择右下角齿轮形状的"Manage"&#xff…

YOLOv5全网独家改进: 红外小目标 | 注意力机制改进 | 并行化注意力设计(PPA)模块,红外小目标暴力涨点 | 2024年3月最新成果

💡💡💡本文独家改进:红外小目标涨点利器,在多个数据集下进行验证,其中并行化 patch-aware 注意力(PPA)模块,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 改进结构图如…

centos7 安装后不能联网怎么解决

如果您在安装 CentOS 7 后无法连接到互联网&#xff0c;则可以尝试以下步骤来解决该问题&#xff1a; 确认网络连接是否正确配置 请检查您的网络连接是否配置正确。您可以通过运行以下命令来检查您的网络连接状态&#xff1a; 复制 ip addr show如果您看到类似于 enp0s3 或 …

pta L1-008 求整数段和

L1-008 求整数段和 分数 10 全屏浏览 切换布局 作者 杨起帆 单位 浙大城市学院 给定两个整数A和B&#xff0c;输出从A到B的所有整数以及这些数的和。 输入格式&#xff1a; 输入在一行中给出2个整数A和B&#xff0c;其中−100≤A≤B≤100&#xff0c;其间以空格分隔。 输…