测试驱动编程(2)进阶单元测试(上)

文章目录

    • 测试驱动编程(2)进阶单元测试(上)
      • 单元测试
        • 单元测试正确打开方式
        • 各类测试比较
      • TDD中的单元测试

测试驱动编程(2)进阶单元测试(上)

单元测试

要打造出出类拔萃的作品,你必须专注于最小的细节

单元测试正确打开方式
  • 单元测试应该是测试流程中占比最重的部分
  • 单元测试通常来说是指方法,但是有些情况下,整个类乃至整个应用程序都可视为单元
  • 单元测试是为了缩小其它(功能,集成)测试的范围,如果一个组织主要依赖于手动测试,这本身就是有问题的
  • 单元测试编写更容易,也能让代码的问题尽早暴露
  • 单元测试为代码重构提供了有力的支持
各类测试比较


下图测试金字塔展示的是UI测试、集成测试、单元测试之间的比重,单元测试要比其它测试多得多

拿最常见的用户注册测试场景举例,最常看到的测试用例就是要考虑用户名为空、密码为空、用户名格式、密码格式、用户名是否存在、密码安全等级等等。

仅为测试这一项功能,就可能需要数十个测试,再加上边界值等情况可能导致上百个测试用例,如果是人工的UI测试,那么代价将是非常大的。

如果使用单元测试来做这些会简单和方便的多,人工只需要填写一个集成测试,检查是否调用了正确的后端方法即可,而无需关注细节。当注册逻辑发生改变了也没关系,因为新单元测试会自动进行测试。

TDD中的单元测试

TDD中的单元测试和传统的单元测试有什么不同呢?答案是:时机
看过我之前写的一篇文章,测试驱动编程快速入门的应该都知道了一个名字:红绿重构

传统先写业务再写单元测试,主要是为了验证业务代码写的对不对,而TDD中的单元测试主要目标是作为驱动开发和设计的动力,定义了我们应该做什么以及做到什么程度,验证只是副产品。

完成的工作量和具体的测试(单元、功能、集成)有关,TDD中的单元测试制订接下来完成尽可能小的任务,要求我们遵循一些设计原则(KISS、SOLID),确保代码的可测试性和解耦性。

TDD迫使我们详细地考虑需求和设计,编写整洁而可行的代码,以及创建可执行的需求并频繁重构。

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

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

相关文章

易刷多平台广告掘金挂机脚本,单号一天至少10-30+【挂机脚本+使用教程】

易刷多平台广告掘金挂机脚本,每天单号可以至少获取10-30的收益。我们提供【挂机脚本使用教程】。 项目介绍: 我们今天为大家带来的是一款多平台的掘金脚本。 这款脚本支持25个平台掘金,可以帮助您解决频繁下载其他脚本的问题。 设备需求&am…

浅谈AI大模型的数据特点和应用问题

【摘要】AI大模型的训练、推理及应用落地都需要大量的数据,其数据具有参数和数据量大、质量要求高、行业垂直属性强、资源消耗大等特点,由此带来的个人隐私泄露、数据中毒、数据篡改等数据安全风险已成为业界必须应对的重要议题。目前大模型的规模化应用…

pandas处理缺失值的10种策略

一、引言 在数据分析的世界里,数据清洗是一项至关重要的前期工作。它犹如给食材去皮、洗净、切片,让它们成为一道道美味佳肴的原材料。对于Python初学者来说,掌握如何使用强大的Pandas库处理数据中的缺失值是迈向数据清洗高手的第一步。本文…

Linux——进程信号

目录 一、信号的理解 二、信号的种类 2.1 标准信号 (1-31) 2.2 实时信号 (通常是34及以上) 三、信号的产生 3.1 用户通过终端产生信号 3.1.1 signal 函数 3.1.2 demo 测试 3.1.3 demo 现象 3.2 通过系统函数产生信号 3.2.1 demo 测试 3.3 由软件条件产生信号 3.3.1…

面向浏览器端免费开源的三维可视化编辑器,包含BIM轻量化,CAD解析预览等特色功能。

ES 3DEditor 🌍Github地址 https://github.com/mlt131220/ES-3DEditor 🌍在线体验 https://editor.mhbdng.cn/#/ 基于vue3与ThreeJs,具体查看Doc 主要功能: 模型导入展示,支持OBJ、FBX、GLTF、GLB、RVT、IFC、SEA、3…

Class类-super关键字

在编程中,super关键字通常用于引用父类(超类)的属性或方法。以下是在不同语言中super关键字的使用示例: JavaScript (ES6 Class Syntax) Javascript 1class Parent { 2 display() { 3 console.log("Parent class…

LeetCode算法题:三数之和

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a b c 0 ?请找出所有和为 0 且 不重复 的三元组。 示例 1: 输入:nums [-1,0,1,2,-1,-4] 输出&#xff1a…

如何将Docker容器打包并在其他服务器上运行

如何将Docker容器打包并在其他服务器上运行 我会幻想很多次我们的相遇,你穿着合身的T恤,一个素色的外套,搭配一条蓝色的牛仔裤,干净的像那天空中的云朵,而我,还是一个的傻傻的少年,我们相识而笑…

有没有适合女性做的副业?盘点9个适合女生做的赚钱兼职副业

亲爱的女神们,你们是否也想在忙碌的生活中寻找一些额外的乐趣和收入呢?今天,就为大家揭秘九种特别适合女性的副业,让你在追求美丽的同时,也能轻松赚取零花钱,秒变“小金库”! 一、宅富社任务赚钱…

BGP策略实验

BGP策略实验 1.拓扑 2.要求 1.使用配用preva1策略,确保R4通过R2到达192.168.10.0/24 2.用AS Path策略,确保R4通过R3到达192.168.11.0/24 3.配置MED策略,确保R4通过R3到达192.168.12.0/24 4.使用Local Preference策略,确保R1通…

关于linux的防护,以及群集你要知道的有哪些9-Redis群集

1、数据库的类型: (1)关系型数据库:Oracle、MySQL、SQL server、DB2 (2)非关系型数据库:Redis、MongDB、Hbase、CouhDB 2、Redis的优点 具有极高的数据读写速度 支持丰富的数据类型 支持数据的…

Sentinel的隔离和降级

文章目录 1、概念简介2、FeignClient整合Sentinel2.1、修改配置,开启sentinel功能2.2、编写失败降级逻辑2.3、总结 3、线程隔离(舱壁模式)3.1、线程隔离的实现方式3.2、sentinel的线程隔离1)配置隔离规则2)Jmeter测试 …

南加州大学字节提出MagicPose,提供逼真的人类视频生成,实现生动的运动和面部表情传输,以及不需要任何微调的一致的野外零镜头生成。

MagicPose可以精确地生成外观一致的结果,而原始的文本到图像模型(如Stable Diffusion和ControlNet)很难准确地保持主体身份信息。 此外,MagicPose模块可以被视为原始文本到图像模型的扩展/插件,而无需修改其预训练的权重。 相关链接 论文链…

k8s pv 一直是release状态

如下图所示,pv 一直是release状态 这个时候大家可能就会想到现在我的 PVC 被删除了,PV 也变成了 Released 状态,那么我重建之前的 PVC 他们不就可以重新绑定了,事实并不会,PVC 只能和 Available 状态的 PV 进行绑定。…

Vue 对象

在 Vue.js 中,操作对象是常见的任务之一。Vue 提供了许多方法和指令来方便地操作对象,包括动态添加属性、遍历对象、响应式更新等。以下是一些常见的对象操作及其详细说明和示例。 创建对象 在 Vue 组件的 data 中创建对象: export defaul…

children和childrenNodes及nodeValue

在JavaScript中,尤其是当处理DOM元素时,children[0] 和 childNodes[0] 确实存在区别,尽管它们看起来都像是访问某个元素子节点的方式。以下是它们之间的主要区别: children 属性 children 属性是一个只读的HTMLCollection&#…

SQL 面试系列(一)【留存率问题】

前言 在学 HQL 之前是不太了解 SQL 的,以为 SQL 只可以实现 CRUD ,直到面试的公司让我下去多了解一些 SQL ,我才最近开始再次深入学习 MySQL 和 Oracle。而且越学越发现 SQL 真的是一门很有深度的语言,我以前的使用只是皮毛而已&a…

如何远程连接默认端口?

远程连接是指通过网络实现两个或多个计算机之间的连接和通信。在进行远程连接时,使用的端口号是一个重要的参数。端口号是计算机上正在运行的特定应用程序的标识符。每个应用程序都会监听一个或多个特定的端口号,以便接收来自其他计算机的连接请求&#…

Android正向开发实现客户端证书认证

前言 如果第三方模块被混淆,那hook方式均不能生效。这时就需要根据系统包去定位校验的函数,因此需要对安卓开发者是如何实现客户端证书校验的有一定了解,接下来就介绍这部分内容。 开发者实现客户端证书校验的本质是:证书/密钥 + 代码。 在形式上有:证书校验、公钥校验和…

【内存泄漏Bug】registerReceiver Are you missing a call to unregisterReceiver()异常分析及解决

问题描述 开发一款WIFI管理APP,再wifi列表页面注册了广播监听,监听网络变化,页面是常驻内存的,跳转到其他app或者其他页面的时候,此页面存在被系统销毁的可能。 android.app.IntentReceiverLeaked: Activity com.xx.a…