【一文清晰】单元测试到底是什么?应该怎么做?

我是java程序员出身,后来因为工作原因转到到了测试开发岗位。测试开发工作很多年后,现在是一名自由职业者

1、什么是单元测试
2、该怎么做单元测试

一、什么是单元测试?

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

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

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

二、单元测试谁来做?

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

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

开发人员做单元测试:

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

测试人员做单元测试:

  • 优点:测试人员有比较系统的测试思想,可以更好地保证用例的覆盖。而且通过写单测测试能更好地了解具体代码结构、流程,对于后续的业务测试也非常有利。
  • 缺点:测试人员的编程技能相对比较弱,如果不同编程是无法开展单元测试的。并且测试人员对代码没有开发人员熟悉,效率会比较低。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

三、单元测试怎么做?

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

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

人工静态检查

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

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

动态执行跟踪

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

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

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

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

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

# 开发人员编写的业务代码
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.mzph.cn/news/109646.shtml

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

相关文章

手机拍照转机器人末端坐标(九点标定法)

1.打印标定纸,随机九个点 2.让UR机器人末端分别走到P1-P9九个点 在图示位置读取九个点的X,Y坐标 3.手机拍照(固定点) 测试可以随机拍一张,实用的话需要固定手机的拍照位置,得到的图片如下: 4.…

【JUC】读写锁

读写锁 文章目录 读写锁1. ReentrantReadWriteLock概述2. 编码演示2.1 ReentrantLock实现2.2 ReentrantReadWriteLock实现 3. ReentrantReadWriteLock3.1 锁降级3.2 锁降级的必要性3.3 饥饿问题 4. StampedLock(邮戳锁也叫票据锁)4.1 特点4.2 三种访问模…

2023年全网最新 Windows10 搭建 Python 环境教程

目录 一、查看计算机操作系统的位数二、安装Python2.1 下载Python安装包2.2 在Windows 64位系统中安装Python2.3 测试Python是否安装成功 三、Windows环境下安装第2个Python(不同版本) ----不需要安装多个Python版本的读者此小节可以忽略 一、查看计算机操作系统的位数 目前&a…

【脉冲通信】用于空间应用的飞秒脉冲通信的符号误码率模型研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Android 第三方app https 抓包

工具选择 Charles 或 Fiddler 都可以 在PC上安装工具并进行设置 Charles Fiddler 设置按官网说明设置一下好。 Charles设置 Fiddler设置 Android Api Level > 24 SSL特殊设置 当Android 的 Api Level > 24时需要修改一下app的一起配置 1.在项目中添加 Android/src/…

【C++笔记】多态的原理、单继承和多继承关系的虚函数表、 override 和 final、抽象类、重载、覆盖(重写)、隐藏(重定义)的对比

1.final关键字 引出:设计一个不能被继承的类。有如下方法: class A { private:A(int a0):_a(a){} public:static A CreateOBj(int a0){return A(a);} protected:int _a; } //简介限制,子类构成函数无法调用父类构造函数初始化 //子类的构造…

IDEA如何拉取gitee项目?

1.登录gitee 说明:打开idea,在设置上面搜索框输入gitee,然后登录gitee注册的账号。 2. 创建gitee仓库 说明:创建idea中的gitee仓库。 3.寻找项目文件 说明:为需要添加gitee仓库的项目进行添加。 4.项目右键 说明&a…

el-tree 获取功率后的树结构

正常来说element框架应该返回的,但实际上没有,只能自己处理了 递归处理,思路就是赋值,如果是自己过滤到的数据就push进去,不是就不要 let newCheckTree [] let tree get_tree(treeData,newCheckTree); //获取过滤…

IPIDEA代理IP如何帮助企业采集市场信息

在当今数字化的时代,市场信息对于企业的发展至关重要。然而,如何高效地收集市场信息成为了每个企业都需要面对的问题。爬虫技术的出现为企业提供了一种高效、便捷的信息采集方式。然而,由于爬虫的请求频率较高,目标网站可能会将频…

vue使用pdf-dist实现pdf预览以及水印

vue使用pdf-dist实现pdf预览以及水印 一.使用pdf-dist插件将PDF文件转换为一张张canvas图片 npm install pdf-dist二.页面引入插件 const pdfJS require("pdfjs-dist"); pdfJS.GlobalWorkerOptions.workerSrc require("pdfjs-dist/build/pdf.worker.entry&…

浅谈云原生

目录 1. 云原生是什么? 2. 云原生四要素 2.1 微服务 2.2 容器化 2.3 DevOps 2.4 持续交付 3. 具体的云原生技术有哪些? 3.1 容器 (Containers) 3.2 微服务 (Microservices) 3.3 服务网格 (Service Meshes) 3.4 不可变基础设施 (Immutable Inf…

支持PC端、手机端、数据大屏端的Spring Cloud智慧工地云平台源码

技术架构:微服务JavaSpring Cloud VueUniApp MySql 智慧建筑工地云平台主要利用大数据、物联网等技术,整合工地信息、材料信息、工程进度等,实现对建筑项目的全程管理。它可以实现实时监测和控制,有效解决施工中的问题&#xff0c…

使用docker搭建drogon windows10,linux,mac下开发环境

2023年10月13日14:52:26 本机环境 Windows 10 专业版 22H2 操作内核19045.2965 如果直接在windows,linux,mac上直接搭建环境确实有一点难度,之前drogon官方并未提供官方镜像,现在有了docker镜像确实方便了,其实我是最…

软件考试学习笔记(希赛)

软考学习笔记-软件设计师 1. 软考基本介绍1.1 软考分数制1.2软考考试分类介绍1.3软件考试报名网站1.4考试内容1.4.1上午考试内容-综合知识1.4.2下午考试内容-软件设计 2.数据的表示2.1进制转换2.1.1R进制------》十进制转换2.1.2十进制-----》R进制转换2.1.3二进制与八进制与16…

网络通信协议-HTTP、WebSocket、MQTT的比较与应用

在今天的数字化世界中,各种通信协议起着关键的作用,以确保信息的传递和交换。HTTP、WebSocket 和 MQTT 是三种常用的网络通信协议,它们各自适用于不同的应用场景。本文将比较这三种协议,并探讨它们的主要应用领域。 HTTP&#xff…

CC2540和CC2541的区别简单解析

CC2541理论上是CC2540的精简版,去除了USB接口,增加了1个HW1C接口。 CC2540集成了2.4GHz射频收发器,是一款完全兼容8051内核的无线射频单片机,它与蓝牙低功耗协议栈共同构成高性价比、低功耗的片上系统(SOC&#xff09…

Gazebo仿真 【ROS: noetic】

参考链接:《ROS机器人开发实践》_胡春旭 目标: 了解如何使用URDF文件创建一个机器人模型,然后使用xacro文件优化该模型,并且放置到rvizArbotiX或Gazebo仿真环境中,以实现丰富的ROS功能。 4.5 Gazebo仿真环境 1&#x…

《动手学深度学习 Pytorch版》 9.1 门控循环单元(GRU)

我们可能会遇到这样的情况: 早期观测值对预测所有未来观测值具有非常重要的意义。 考虑一个极端情况,其中第一个观测值包含一个校验和,目标是在序列的末尾辨别校验和是否正确。在这种情况下,第一个词元的影响至关重要。我们希望有…

PS修改背景色,线框底图

1、打开图片,ctrlj复制一层 2、图像-调整-反相 3、ctrll调整色阶,将中间的色块向右移,灰色线和字体的会变黑

游戏类app有哪些变现方式?

游戏类app有多变现策略,一些是一些主要的方式:#APP广告变现# AdSet官方资讯-上海神蓍信息科技有限公司 一、游戏销售 一次性购买:玩家支付一次性费用购买游戏,之后可以免费游玩。这种模式常见于主机游戏和PC游戏。 游戏包&…