什么样的测试才是优秀的测试

news2024/7/6 17:49:34

  什么样的测试才是优秀的测试

  优秀的测试应该包括以下要素:

  · 测试代码的可读性和可维护性

  · 代码在项目中及特定源代码中的组织方式

  · 测试所检查的内容

  · 测试的可靠性及可重复性

  · 测试对测试替身的使用

  · 可读的代码才是可维护的代码

  代码较差的可读性与缺陷密度密切相关:虽然测试是为了捕获错误,防止缺陷,但是测试代码也是代码,其可读性也很容易变差。难以阅读的代码难以测试,难以阅读的测试代码难以调试和修复错误。

  结构有助于理解事物

  如果是个巨大的测试方法,花了很长时间执行完测试后报错,你可能要花一段时间才能在测试代码中找到确切的出错位置。测试代码缺乏结构,无助于你理清相互的影响,某个对象是在哪里初始化的,出错时某个变量的值是多少,等等。

  如果测试代码具有一个合理的结构并确保它有用,这样你才能:

  · 找到与手上任务相关的测试类

  · 从那些类中识别出合适的测试方法

  · 理解测试方法中对象的生命周期

  

  要注意测试所检查的内容

  用正确的方式测试正确的事物也很关键。

  不要太过相信测试的名称。有时那些测试其实完全是在测试不同的东西。这与良好的结构有关——如果测试的名字错误地表达了要测试的内容,那就像是跟着错误的路标驾驶。

  从可维护性角度尤其重要的是,你的测试应该检查预期行为而非具体实现。

  独立的测试易于单独运行

  测试代码要关注测试的独立水平,尤其是架构边界附近。在边界上容易出现代码坏味道。一看到外部信赖就特别小心,包括:时间、随机数、并发性、基础设施、现存数据、持久化、网络。

  隔离和独立很重要,因为没有它们就难以运行和维护测试。

  测试意外失败的最不寻常的例子之一,是一个测试作为套件的一部分时可以通过,但单独运行却神秘地失败。那些症状散发着测试相互信赖的臭气。

  当编写的测试涉及时间、随机数、并发性、基础设施、持久化或网络时,你就应该格外小心。尽量避免依赖它们,将它们限制到小的隔离单元中。

  在实践中要找到合适的方式做下面这些事:

  · 用测试替身替换对第三方库的依赖,根据需要将其包装到你自己的适配层中。

  · 将测试代码与其用到的资源放在一起,或许是在一个包里。

  · 让测试代码自己产生所需的资源,而不要让它们与源代码分开,,

  · 对于需要持久化的集成测试,使用内存数据库。用了干净的数据集,就能极大地简化测试的启动问题。还有,它们通常启动得超级快。

  · 令测试自行建立所需的上下文。不要依赖于任何之前运行的任何测试.

  · 将线程代码分为同步和异步两部分,所有程序逻辑都放在一个常规的同步代码单元中,将棘手的并发部分留给一小堆专用测试。

  可靠的测试才是可靠的

  几乎不会失败的测试就等于废物。这种测试我们称之为快乐的测试——某个测试快乐地执行一段生产代码,或者是全部的执行路径,却没有一句断言。它们根本什么都没测试。

  为了让测试值得依靠,它们就需要可重复。

  如果你的逻辑包含异步内容或依赖于当前时间,确保将它们隔离在一个接口之后,这样就可以用“测试替身”来替换它们从而使测试可重复。

  每个行业都有其工具而测试也不例外

  测试替身就是测试的工具,它是程序员熟知的stub(桩)、fake(伪造对象)、mock(模拟对象)等的总称。

  使用测试替身的好处:

  · 通过简化要执行的代码来加速执行测试

  · 模拟难以出现的异常情况

  · 观察那些对测试代码不可见的状态和交互

  但测试替身并不是行业中编写自动化测试的仅有工具,还有测试框架。

  如需了解更多测试技术信息请关注:深圳多测师软件与技术服务有限公司

 

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

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

相关文章

GB 35114-2017 学习笔记

GB 35114-2017 学习笔记 第四章 公共安全视频监控联网信息安全系统互联结构 公共安全视频监控信息安全系统 公共安全视频监控信息安全系统由四部分组成: 具有安全功能的前端设备 FDWSF(安全前端设备:Front-end Device With Safety Function)具有安全功能的用户终…

Ubuntu18.04环境下安装igH EtherCAT Master

一、安装步骤 下载安装包 EtherCAT安装包:igH EtherCAT安装包(目前最新的稳定版) 安装依赖包 sudo apt install autoconf automake libtool net-tools解压EtherCAT安装包,进入解压出的文件夹,右键打开终端输入 ./b…

Spring IoC容器、IoC与DI

目录 Spring是什么? 理解容器 什么是IoC(Inversion of Control) 传统的new创建对象的方式中类与类的耦合程度很大。 IoC的优势: Spring IoC容器最核心的功能 什么是DI (Dependency Injection) IoC和DI的区别 Spring是什么? Spr…

145. 二叉树的后序遍历【34】

难度等级:容易 上一篇算法: 102. 二叉树的层序遍历【206】 力扣此题地址: 145. 二叉树的后序遍历 - 力扣(Leetcode) 1.题目:145. 二叉树的后序遍历 给你二叉树的根节点 root ,返回它节点值的 后…

Django DRF - JWT Token认证使用

JWT Token认证使用 jwt官网:https://jwt.io/ 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证。我们不再使用Session认证机制,而使用Json Web Token认证机制。 一. JWT概念 Json web token (JWT),…

JavaScript—javaEE

文章目录 1.关于JavaScript2.引入的方式3.输入输出4.语法4.1变量4.2基本数据类型4.3运算符4.4数组4.5函数4.6对象 5.dom5.1获取元素5.2操作元素5.3表单控件5.4样式:style属性5.5模仿和服务端交互 6.ajax6.1概念6.2作用6.3Ajax代码6.4Ajax发get请求6.5Ajax发post请求…

【文件系统和系统日志分析】

目录 一、inode和block概述block(块)inode(索引节点) 二、inode内容三、inode的号码3.1、查看inode号码的方法 四、inode的大小磁盘分区后的结构访问文件的简单流程 五、删除乱码文件六、inode节点耗尽故障处理6.1、模拟inode节点…

【Tomcat】Tomcat的安装配置和在Idea中使用Tomcat:

文章目录 一、获取安装包二、配置环境三、验证是否配置成功【法一】通过运行tomcat文件夹下的bin文件夹中的 startup.bat【法二】快捷键【winr】,输入【cmd】,点击【确定】,输入 startup.bat 四、出现乱码和端口号被占用的解决方案【1】出现乱…

Spring概述,IOC,AOP使用

Spring简介 Spring概述 官网地址:https://spring.io/ Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Java 平台,它最…

OpenStack 面板更替换代:Skyline Dashboard <-- Horizon 面板

~、OpenStack 面板更替换代&#xff1a;Skyline Dashboard <-- Horizon 面板 先决条件 一个至少运行核心组件的 OpenStack 环境, 并能通过 Keystone endpoint 访问 OpenStack 组件 一个安装有容器引擎的 (docker 或 podman) 的 Linux 服务器 一、 &#xff08;一&…

用starter实现api接口的加密与日志功能

一、概述 运用AOP技术实现对api接口的加密及日志功能。 加密&#xff1a; 需要加密的api接口上加注解&#xff1a;Encrypt&#xff08;自定义注解&#xff09;接口返回类型为String时才加密采用对称加密&#xff1a;加密和解密使用相同的密钥 日志&#xff1a; 对所有的api接…

【虚拟仿真】Unity3D打包WEBGL后播放视频(VideoPlayer组件)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 本篇文章实现Unity3D打包WEBGL后播放视频&#xff0c;如下图所…

实现服务器版本的表白墙

目录 初始前端代码 网页初始效果 一、确定接口 二、编写代码 2.1 创建项目七步走 1、创建Maven项目 2、引入依赖 3、构建目录 4、编写代码 5、打包、部署 ​编辑 7、验证代码 三、具体的代码逻辑 3.1 服务器——两个服务接口 3.2 前端页面的代码 3.2.1 前端存档…

Springcloud快速复习

按照个人的习性,分布式我学习完以后一定会忘为此写次笔记自己快速复习 目录 Springcloud介绍注册中心 Springcloud介绍及微服务介绍 为什么学? 也不是以前的单体架构被淘汰而是,当业务足够大型,进行优化 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff…

SystemUI流程

目录 SystemUI类图 SystemUI流程一&#xff1a;SystemUI启动流程 SystemUI流程二&#xff1a;StatusBar创建流程 SystemUI流程三&#xff1a;系统Notification实现流程 源码基于 Android 12。 SystemUI 是 Android 的系统界面&#xff0c;在 Andorid 系统源码中&#xff0c;…

MySQL安装文档

一、下载 点开下面的链接&#xff1a;https://dev.mysql.com/downloads/mysql/ 点击Download 就可以下载对应的安装包了, 安装包如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0gE9C3W-1682005377951)(assets/image-20221020012428839.png)]…

5. VBA消息框(MsgBox)

MsgBox函数显示一个消息框&#xff0c;并等待用户点击一个按钮&#xff0c;然后根据用户点击的按钮执行相关的操作。 5.1 语法 MsgBox(prompt[,buttons][,title][,helpfile,context]) 5.2 参数说明 prompt - 必需的参数。在对话框中显示为消息的字符串。提示的最大长度大约为…

腾讯云4核8G服务器CVM S5和轻量应用服务器性能PK来了

腾讯云4核8G云服务器可以选择轻量应用服务器或CVM云服务器标准型S5实例&#xff0c;轻量4核8G12M服务器446元一年&#xff0c;CVM S5云服务器935元一年&#xff0c;相对于云服务器CVM&#xff0c;轻量应用服务器性价比更高&#xff0c;轻量服务器CPU和CVM有区别吗&#xff1f;性…

ERROR [io.undertow.request] UT005023: Exception handling request 报错处理

1.背景 找了好久&#xff0c;突然灵光乍现是不是因为容器错误问题&#xff0c;本来就是刚从github上下载下来的项目&#xff0c;怎么别人不报错就我报错嘞&#xff0c;我还什么都没改怎么能这样&#xff01;&#xff01;&#xff01;&#xff01; 这就是我的报错&#xff0c;乍…

storm proxies代理服务器IP如何提高安全性?

代理服务器IP可以通过以下方式来提高安全性&#xff1a; 选择可靠的代理提供商&#xff1a;选择经过信誉验证、有良好用户评价的代理提供商&#xff0c;确保代理服务器IP的稳定性和可靠性&#xff0c;减少被黑客攻击的风险。使用加密通信协议&#xff1a;使用支持加密通信协议&…