单元测试是什么?为什么要做单元测试?

2023-11-03

背锅侠 一个有个性的订阅号


1.单元测试是什么

单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为1。

长按图片识别二维码

入群-学习-合作-投稿

加小石阿微信 带你上高速

2.单元测试的好处

1,单元测试不但会使你的工作完成得更轻松。而且会令你的设计会变得更好,甚至大大减少你花在调试上面的时间 

2,提高代码质量 

3,减少bug,快速定位bug 

4,放心地修改、重构 

5,显得专业(玩笑话)

3.写单元测试要注意什么

1,不能只测试一条正确执行路径,要考虑到所有可能的情况 

2,要确保所有测试都能够通过,避免间接损害 

3,如果一个函数复杂到无法单测,那就说明模块的抽象有问题 

4,配置不是单元测试的难点,难点是mock(后文讲),做单元测试需要伪造被测函数用到的大部分函数间接损害:在整个系统中,当某一部分加入了新特性,或者修复了一个bug之后,给系统的其他(与前面可能是互不相关的)部分引入了一个新的bug(或者损害)。如果无视这种损害并且继续开发的话,那么将可能带来一个很危险的问题,最后可能会导致整个系统崩溃,并且没人能够修复。

4.为什么写单元测试(为什么会拒绝单元测试)?

编写单元测试太花时间了?考虑下面问题:

1,对于所编写的代码,你在调试上面画了多少时间? 

2,对于以前你自认为正确的代码,而实际上这些代码却存在重大的bug,你画了多少时间在重新确认这些代码上面? 

3,对于一个别人报告的bug,你花了多少时间才找出导致这个bug的源码位置? 

对于那些没有使用单元测试的程序员而言,上面这些问题所耗费的时间的递增速度是很快的,而且随着项目深入,递增速度会变得更快;而另一方面,适当的单元测试却可以很大程度地减少这些时间,从而为你腾出足够的时间来编写所有的单元测试——甚至可能还有剩余的空闲时间。

a.运行测试的时间太长?

一般合适的测试是不会让这种情况发生的。 

有些真的会花很长时间的,可以把耗时的测试和其他测试分开。

b.不清楚代码的行为?

如果实在不清楚代码的行为,那么现在应该也不是应该编码的时候。

c.代码都能编译通过啊?

ok,你的代码语法正确,应该也是可以运行的。但是代码的行为和你的预期是一样的么?

public void addItem(Object itemObject){
    List myList = new List;
    myList.add(itemObject);
    myList.add(itemObject);
    ...
}

本文部分来源于网络如有侵权请联系删除

背锅侠Tester

长按关注下方二维码领取资料

linux

jmeter

python

appscan

mysql

爬虫

sele

面试

WE WISH YOU HAPPY

NEW YEAR

2019

留言 在看 分享 你看着整儿

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试是什么?为什么要做单元测试? 的相关文章

  • QuotaExceededError the quota has been exceeded --- Firefox 报错解决

    QuotaExceededError the quota has been exceeded Firefox 报错解决 Firefox 报错 QuotaExceededError the quota has been exceeded 在F
  • 联想小新Pro13解决黑苹果下麦克风不可用(曲线救国)

    众所周知 联想小新Pro13在安装黑苹果系统之后不能正常地使用麦克风的功能 这也成为了除开原装网卡无隔空和随航以外 小新Pro13在黑苹果下唯一不能使用的功能了 今天来讲一下我是如何解决这个问题的 解决思路 首先讲一下解决思路 写驱动是不会
  • DMAIC方法的五个步骤

    DMAIC是指一种数据驱动的质量战略 用于改进流程 是公司 六西格玛质量计划 的组成部分 DMAIC是五个相互关联的阶段的首字母缩写 定义 测量 分析 改进和控制 DMAIC方法旨在允许灵活性和迭代工作 它是 定义 测量 分析 改进 和 控
  • 记一次通过binlog日志恢复MySQL数据库的经历

    通过binlog日志恢复MySQL数据库的数据 一 起因 起因是我在自己服务器上搭建的博客被黑客攻击 黑客删除了我的数据库并且要求支付比特币才给我恢复 博客所有的表和数据都被清空 只留下了勒索金额和地址 如图 穷鬼如我当然是 二 恢复数据
  • 认识djiango第一章(展示日志)

    定义 Django是python的一个主流web框架 提供一站式解决方案 开发成本低 内建ORM 数据管理后台 登录认证 表单 RESTAPI等功能 适合开发中大型项目 其他web框架 Flask 轻量级 Tornado 异步 注 本次编写
  • JAVA求素数和模拟条件

    题目 牛宝在新的一年里打算扫除过去身上的坏运气 故他打算筛选出今年第1 365天中符合今年自己的那些幸运数字 在今年对应数字的那一天做特殊的事 这些数字受限于乾卦和坤卦两个卦象条件 牛宝需自己破译出来才行 你能帮助他吗 根据牛宝得知的乾坤卦
  • 【Python之路——基础回顾90列】

    基础 1 求绝对值 求绝对值或复数的模 gt gt gt abs 6 6 2 元素都为真 接受一个迭代器 如果迭代器的 所有元素 都为真 那么返回 True 否则返回 False gt gt gt all 0 1 2 3 False gt
  • 7,tcl双引号和花括号

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 关于xilinx vivado FPGA XDC约束的所有讲解文档汇总 关于xilinxvivadoFPGAXDC约
  • BeanUtils和JSON对象复制性能对比

    对比对象 常见的BeanUtils有2个 spring有BeanUtils 浅拷贝 apache的commons也有BeanUtils 深拷贝 测试 200000次循环 测试次数 200000次循环 测试结果 依旧是20倍左右的差距 循环2
  • Windows Server 2008 的十大重要新特性

    Windows Server 2008 十项重要新技术 在微软的新产品Windows server 2008中 相比以前版本的 服务器 操作系统 又融入了十项强大的新技术 不敢说这些技术是否真的能让用户得到更好的服务 但就微软而言 体现了其
  • EDA实验:数字频率计(FREQ)设计(VHDL)

    目录 一 实验要求 二 程序源代码 2 1 CLKGEN的VHDL源程序及分析 2 2 REG32B的VHDL源程序及分析 2 3 TESTCTL的VHDL源程序及分析 2 4 FREQ的VHDL源程序及分析 三 硬件实验现象 四 对实验步
  • 【Apache Spark 】第 9 章使用 Apache Spark构建可靠的数据湖

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • unicode 和 utf8

    关于 unicode utf8 文章来自于 http blog csdn net tge7618291 article details 7599902 ascii 主要来表示英文 但是要全世界那么多语言符号文字 ascii就不够使用了 为了
  • ADFS 证书自动更新问题

    ADFS 证书自动更新问题 确定ADFS是否开启自动更新 查看ADFS属性 如何确定当前证书何时到期 文章参考地址 https docs microsoft com en us windows server identity ad fs o
  • 文件上传漏洞详解(CTF篇)

    需要了解的前置知识 1 什么是文件上传 文件上传就是通过流的方式将文件写到服务器上 文件上传必须以POST提交表单 表单中需要
  • js实现页码的切换

    效果图 页面布局与样式
  • 程序设计【Week4】作业

    A题 题意 ZJM 有 n 个作业 每个作业都有自己的 DDL 如果 ZJM 没有在 DDL 前做完这个作业 那么老师会扣掉这个作业的全部平时分 所以 ZJM 想知道如何安排做作业的顺序 才能尽可能少扣一点分 请你帮帮他吧 Input 输入
  • vue3监听页面滚轮

    需求 实现滚轮滚动 左侧导航栏动态固定定位 且相应高亮对应的正文内容 难点 监听了scroll之后点击其他页面也会监听 会一直报错 当前页面滚轮滑到最底部后切换别的页面 也是定位在最底部 因为滚轮一直处于监听状态 固定的导航栏不能覆盖顶部信
  • 【北大核心&CSCD期刊】生物特征识别论文投稿经历

    计算机工程与应用 半月刊 审稿快 比较简单
  • AD如何圆形布局led

    1 左击选中led 2 右击复制 点击圆心 3 选择edit paste special 4 输入个数 和角度 360 个数 5 点OK 选择圆心双击

随机推荐

  • 网工必备!超实用的九大常用的网络命令

    一 ping命令 ping是个使用频率极高的实用程序 主要用于确定网络的连通性 这对确定网络是否正确连接 以及网络连接的状况十分有用 简单地说 ping就是一个测试程序 如果ping运行正确 大体上就可以排除网络访问层 网卡 Modem的输
  • Node.js+express连接mysql数据库

    首先nodejs pxpress连接mysql 数据库我们要用的工具有 前提得搭建号nodejs环境 https nodejs org en node官网 进入官网后不要直接下载推荐版本 推荐的node版本太高的有的东西是不兼容的 推荐大家
  • 200个经典C语言程序

    1 绘制余弦曲线 在屏幕上用 显示0 360度的余弦函数cos x 曲线 问题分析与算法设计 如果在程序中使用数组 这个问题十分简单 但若规定不能使用数组 问题就变得不容易了 关键在于余弦曲线在0 360度的区间内 一行中要显示两个点 而对
  • ubuntu安装flex和bison时显示没有可安装候选的解决方案

    任务 在ubuntu虚拟机中下载安装flex和bison 工具版本 Virtual Box6 1 Ubuntu16 BUG描述 输入命令 sudo apt get install flex bison 报错 解决方案 flex和bison属
  • Set构造函数及其属性

    Set构造函数及其属性 Set的属性 Set prototype Set prototype add 方法 Set prototype clear 方法 Set prototype has 方法 Set prototype delete 方
  • UART串口的8倍过采样和16倍过采样原理

    由于在空闲状态时 传送线为逻辑 1 状态 而数据的传送总是以一个起始位 0 开始 所以当接收器检测到一个从 1 向 0 的跳变时 便视为可能的起始位 要排除干扰引起的跳变 起始位被确认后 就知道发送器已开始发送 接收器就可以按这个数据通信格
  • 利用SSM搭建web项目

    下面给大家介绍一下 ssm的搭建和使用 7步搞定框架搭建 SSM所需要的jar包下载地址 http download csdn net download baidu 32492845 10126554 1 创建数据库 DROP TABLE
  • 性能测试怎么做?性能测试策略配套适用场景,打通性能测试...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 网易2018校园招聘编程题真题集合

    1 8 编程题 魔法币 include
  • linux fedora 桌面环境,为Fedora 30系统安装Deepin桌面环境(DDE)

    Fedora 30已经新增两个桌面环境选项 DeepinDE 和 Pantheon Desktop 所以除GNOME KDE Plasma 和 Xfce 之外 因为Deepin桌面环境现在可以在Fedora 30存储库中使用 用户现在还可以
  • ChatGPT应用场景: 基于对话生成的智能客服系统

    关于ChatGPT 今天小编简单说下用在客服服务的要点 ChatGPT可以用于开发基于对话生成的智能客服系统 帮助企业提供高效 便捷 满意的在线客服服务 从而提升客户体验和满意度 以下是ChatGPT应用于智能客服系统的一些场景 1 自动回
  • 基于redis分布式缓存实现

    在网上找了些redis搭建集群的资料 分享给大家 可以仔细看看 了解redis主从复制的逻辑 以及如何构建redis集群 Redis复制流程概述 Redis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的 也就是说无论
  • flask.ext 的那些事

    偶然发现 在pycharm 使用alter enter 自动修复 未导入的外部模块时 推荐的是 flask ext 包名 的形式 如下例 from flask ext migrate import Migrate MigrateComman
  • 分立元件搭建自举电路解析-高端mos驱动

    分立元件搭建自举电路 上桥mos驱动 高端MOS为什么要自举电路 自举电容 分立元件搭建自举电路 高端MOS为什么要自举电路 众所周知MOS是电压型驱动 只有G极比S极高一个开启电压Vth之后 MOS才会导通 这里指NMOS 但是如下图 我
  • JQuery 页面加载完成后执行事件

    一 document ready function code 二 jQuery document ready function code 三 window nl ad function code 四 将jquery代码放入body的后面 这
  • 使用OpenCV/python进行双目测距

    在做SLAM时 希望用到深度图来辅助生成场景 所以要构建立体视觉 在这里使用OpenCV的Stereo库和python来进行双目立体视觉的图像处理 立体标定 应用标定数据 转换成深度图 标定 在开始之前 需要准备的当然是两个摄相头 根据你的
  • 什么是 agent

    agent 是任何通过sensor感知其环境并通过actuators在此环境中作出行动的东西 比如人agent sensor 是眼睛 耳朵 以及其他器官 actuators 是手 腿 声道等 比如机器人agent sensor 是摄像头 红
  • JVM系列-第8章-执行引擎

    文章目录 toc 执行引擎 执行引擎概述 执行引擎概述 执行引擎工作过程 Java代码编译和执行过程 解释执行和即时编译 什么是解释器 什么是JIT编译器 机器码 指令 汇编语言 机器码 指令和指令集 汇编语言 高级语言 字节码 C C 源
  • Java使用图片压缩工具压缩图片的两种方法

    上代码 pom xml
  • 单元测试是什么?为什么要做单元测试?

    背锅侠 一个有个性的订阅号 1 单元测试是什么 单元测试是开发者编写的一小段代码 用于检验被测代码的一个很小的 很明确的功能是否正确 通常而言 一个单元测试是用于判断某个特定条件 或者场景 下某个特定函数的行为1 长按图片识别二维码 入群