单元测试到底是什么?应该怎么做?

news2024/11/25 20:15:11

一、什么是单元测试?

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围,并没有一个明确的标准,“单元”可以是一个函数、方法、类、功能模块或者子系统。单元测试通常和白盒测试联系到一起,如果单从概念上来讲两者是有区别的,不过我们通常所说的“单元测试”和“白盒测试”都认为是和代码有关系的,所以在某些语境下也通常认为这两者是同一个东西。还有一种理解方式,单元测试和白盒测试就是对开发人员所编写的代码进行测试。

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

二、单元测试谁来做?

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

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

开发人员做单元测试:

  • 优点:开发人员对代码最熟悉,而且开发人员编程技能相对比较强,所以开发人员自己写单元测试效率上和覆盖率上都比较高
  • 缺点:开发人员平时写业务代码就要花费很多时间,有时候确实没有时间写单元测试;而且大部分开发人员没有太好的测试思想,单元测试可能只是写个最简单的用例就完了;自己写的代码自己测,往往都是不靠谱!

测试人员做单元测试:

  • 优点:测试人员有比较系统的测试思想,可以更好地保证用例的覆盖。而且通过写单测测试能更好地了解具体代码结构、流程,对于后续的业务测试也非常有利。
  • 缺点:测试人员的编程技能相对比较弱,如果不同编程是无法开展单元测试的。并且测试人员对代码没有开发人员熟悉,效率会比较低。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

三、单元测试怎么做?

单元测试的实现方式包括:人工静态检查、动态执行跟踪

  • 人工静态检查:就是通常所说的“代码走读”,主要是保证代码逻辑的正确性
  • 动态执行跟踪:就是把程序代码运行起来,检查实际的运行结果和预期结果是否一致

人工静态检查

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

  • 检查算法的逻辑正确性
  • 模块接口的正确性检查
  • 输入参数有没有作正确性检查
  • 调用其他方法接口的正确性
  • 异常错误处理
  • 保证表达式、SQL语句的正确性
  • 检查常量或全局变量使用的正确性
  • 程序风格的一致性、规范性
  • 检查代码注释是否完整

动态执行跟踪

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

  • Java:JUnit、TestNG
  • Python:UintTest、pyTest

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

  • 语句覆盖
  • 分支覆盖
  • 条件覆盖
  • 分支-条件覆盖
  • 条件组合覆盖
  • 路径覆盖

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

# 开发人员编写的业务代码
class CalUtil:
    """计算器"""

    @staticmethod
    def add(x, y):
        """加法"""
        return x + y

    @staticmethod
    def sub(x, y):
        """减法"""
        return x - y

    @staticmethod
    def mul(x, y):
        """乘法"""
        return x * y

    @staticmethod
    def div(x, y):
        """除法"""
        return x / y
# 单元测试脚本
import unittest
from test_ut.cal import CalUtil

class TestCal(unittest.TestCase):
    def test_add_01(self):
        # 测试数据
        x = 1
        y = 2
        expect = 3

        # 调用被测方法
        result = CalUtil.add(x, y)
        print(f"result={result}")

        # 断言
        self.assertEqual(expect, result)

    def test_add_02(self):
        # 测试数据
        x = 1
        y = -1
        expect = 0

        # 调用被测方法
        result = CalUtil.add(x, y)
        print(f"result={result}")

        # 断言
        self.assertEqual(expect, result)

    # ...

单元测试基本等同于白盒测试,所以若想对于单元测试有更深入的了解,可以关注博主,持续更新!

下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

资料获取方式 :

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

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

相关文章

Kafka3.0.0版本——Broker(上下线)示例

目录 一、Broker(上下线)示例1.1、三台服务器信息1.2、先启动zookeeper集群,再启动kafka集群1.3、zookeeper客户端工具prettyZoo查看brokers中ids1.4、停止某一台kafka服务,再次查看brokers中ids1.5、重新启动停止的kafka服务&…

笔记——听听前辈们的教学评一体化

精选课程内容 强而有力的知识 做中学,用中学,创中学。 这个技术很难做 关于支架的新理解 有价值 有意义 和 趣味性 权衡,不能为了趣味性舍弃价值 举例说明文 被教成了文学作品 导致所教所学 悄然发生了偏移。 所以教学评如何一直&#xff…

使用Beautiful Soup等三种方式定制Jmeter测试脚本

目录 背景介绍 实现思路 把脚本数据读出,使用正则表达式(re库)匹配关键数据进行修改 把脚本数据读出,使用BeautifulSoup的xml解析功能解析后修改 通过Beautiful Soup Beautiful Soup 具体实现 使用string.Template字符替换…

Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库

在之前的《手把手教你用 NebulaGraph AI 全家桶跑图算法》中,除了介绍了 ngai 这个小工具之外,还提到了一件事有了 Jupyter Notebook 插件: https://github.com/wey-gu/ipython-ngql,可以更便捷地操作 NebulaGraph。 本文就手把手教你咋在 J…

BpBinder与PPBinder调用过程——Android开发Binder IPC通信技术

在Android系统中,进程间通信(IPC)是一个非常重要的话题。Android系统通过Binder IPC机制实现进程间通信,而Binder IPC通信技术则是Android系统中最为重要的进程间通信技术之一。本文将介绍Binder IPC通信技术的原理,并…

实测有效Window10系统解决文件名过长无法删除或移动问题

问题:window10家庭版,文件名字太长无法对其进行操作 如图 PS:什么注册表方法,压缩方法都没效果 解决: 打开 注册编辑器 进入路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 修改 LongP…

Jenkins 修改默认管理员帐号

1、新增一个新的超级管理员用户,并验证能正常登录 2、进入 Jenkins 用户管理目录: /data/software/jenkins/users 3、修改超级管理文件夹的名称为其他名称,如:mv admin_*** ifadm_*** 4、重启Jenkins容器

snowboy+sherpa-onnx+Rasa+Coqui实现语音音箱【语音助手】

背景 本系列主要目标初步完成一款智能音箱的基础功能,包括语音唤醒、语音识别(语音转文字)、处理用户请求(比如查天气等,主要通过rasa自己定义意图实现)、语音合成(文字转语音)功能。 coqui主要在项目中完成接收rasa响应的内容&…

Postgresql源码(111)dms框架进程信号发送与处理流程

信号处理整体流程 信号从bgworker发出后,主进程将ParallelMessagePending置为true,下次CHECK_FOR_INTERRUPTS()时,会进入信号处理逻辑中:HandleParallelMessages。进入信号处理逻辑后,首先遍历所有现存的ParallelCont…

护网专题简单介绍

护网专题简单介绍 一、护网红蓝队介绍1.1、网络安全大事件1.2、护网行动由来1.3、护网行动中的角色二、红队介绍2.1、红队所需技能2.2、红队攻击流程 三、蓝队介绍3.1、蓝队所需技能3.2、蓝队防守四阶段3.3、蓝队前期准备 四、常见安全厂商介绍4.1、常见安全厂商 五、常见安全产…

Softing工业获得自动化产品安全开发流程认证

Softing工业获得了TV Sd颁发的IEC 62443-4-1产品安全开发流程认证。 (IEC 62443-4-1认证确保网络安全) 截至2023年6月,位于德国哈尔和纽伦堡的工厂以及罗马尼亚克卢日的Softing工业研发部门已获得IEC 62443-4-1:2018标准的认证。该认证流程由…

Ajax-概念、Http协议、Ajax请求及其常见问题

Ajax Ajax概念Ajax优缺点HTTP协议请求报文响应报文 Ajax案例准备工作express基本使用创建一个服务器 发送AJAX请求GET请求POST请求JSON响应 Ajax请求出现的问题IE缓存问题Ajax请求超时与网络异常处理Ajax手动取消请求Ajax重复发送请求问题 Ajax概念 AJAX 全称为Asynchronous J…

《孙子兵法》快速概览,有哪些章节?趣讲《孙子兵法》【第2讲】

《孙子兵法》快速概览,有哪些章节?趣讲《孙子兵法》【第2讲】 《孙子兵法》十一家注是一个有名的版本,十一家注是曹操、杜牧等十一人注释,曹操是真正的军事家,是名副其实的大咖。总共三卷十三篇,比较难记住…

Unity 3D中使用tilemap创建关卡地图,瓦片间隙有漏缝

我们使用一张图片来作为Sprite图集,创建地形图: 运行后,会发现,瓦片之间似乎总是有间距。 检查了图片发现,并不是图片边界存在间隙。 最后发现问题是出在图片资源中的线性过滤属性值: 在设计界面就能够看…

【三维编辑】SPIn-NeRF:多视图分割与感知修复(CVPR 2023)

文章目录 摘要一、简介二、相关工作1.Image Inpainting2.NeRF 操作3. 背景: NeRF 知识 三、方法3.1.多视图分割3.1.1掩码初始化3.1.2基于nerf的分割 3.2.多视图 Inpainting3.2.1 RGB先验3.2.2深度先验3.2.3基于patch 的优化3.2.4掩码精炼 四、实验五、安装与代码讲解1.项目安装…

一篇文章看懂Apipost Mock功能怎么用

在接口开发过程中,Mock功能可以帮助开发者快速测试和验证接口的正确性和稳定性,以便快速迭代和修复问题。Apipost推出智能Mock功能,可以在智能期望中填写一些触发条件,开启后,Apipost会根据已设置的触发条件&#xff0…

Linux-GPIO 配置pull up、pull down、no pull

author daisy.skye的博客_CSDN博客-Qt,嵌入式,Linux领域博主 https://blog.csdn.net/qq_40715266?typeblog 系列基于RK3568的Linux驱动开发——GPIO知识点(一)_daisy.skye的博客-CSDN博客基于RK3568的Linux驱动开发—— GPIO知识点(二&#…

【H5】盘点HTML5新特性

html5总的来说比html4多了十个新特性,但其不支持ie8及ie8以下版本的浏览器 文章目录 一、语义标签二、增强型表单三、音频和视频四、Canvas绘图五、SVG绘图六、地理定位七、拖放API八、Web Worker九、Web Storage十、WebSocket 一、语义标签 html5语义标签&#x…

Maven的安装与配置(包含所有细节)

一、idea版本和maven配对 这里是很多新手都会遇到的大坑,一定要先将自己的idea版本和maven进行版本配配对。 Maven3.6.3版本兼容问题 注意:针对一些老项目 还是尽量采用 3.6.3版本,针对idea各个版本的兼容性就很兼容 IDEA 2022 兼容maven 3.8…

肠道重要菌属——埃希氏菌属 (Escherichia), 肠道炎症和生态失调相关

谷禾健康 —变形菌门 —γ变形菌纲 —肠杆菌目 —肠杆菌科 —埃希氏菌属 埃希氏菌属 (Escherichia),是一种常见的细菌。其中最著名的种是大肠杆菌(Escherichia coli),大肠杆菌是一种厌氧菌,通常生活在人和动物的肠道中…