一些定义–测试技术9

我认为我即将结束有关测试技术的博客系列,感觉好像已经过去了。 对我来说更清楚的一件事是,测试方法仍处于起步阶段,因此是开发人员之间争执或讨论的明确来源,这是一件好事。

我怀疑我们正处于职业发展史上的某个时刻,写作测试学科才刚刚起步,有一天会成为普通的地方,并作为基础编程课程的一部分进行教授(1)。 今天的博客提供了本系列以前的博客中使用的术语的摘要。

单元测试
我在本系列博客的第二部分中介绍了单元测试的定义,并给出了Shane Warden的观点,他在他的《 敏捷开发的艺术》一书中指出,单元测试的运行速度应为“每秒数百”。 迈克尔·费瑟斯(Michael Feathers)在他的《 有效处理旧版代码》一书中指出,在以下情况下,单元测试不是单元测试:

  1. 它与数据库对话。
  2. 它通过网络进行通信。
  3. 它涉及文件系统。
  4. 您必须对环境做一些特殊的事情(例如编辑配置文件)才能运行它。

我还引用了Roy Osherove的话,他在他的《单元测试的艺术》一书中一个很好的单元测试总结为:“自动代码段调用被测试的方法或类,然后检查关于该方法或方法的逻辑行为的一些假设。类。 单元测试几乎总是使用单元测试框架编写的。 它可以轻松编写并快速运行。 它是完全自动化,值得信赖,可读性和可维护性的。”

单元测试可以使用来概括FIRST缩写:快速,独立的,可重复的,自我确认和及时的。

何时使用单元测试
单元测试是测试的基础。 如果您使用的是测试驱动开发(TDD),则在编写生产代码之前要编写失败的测试。 如果您不使用TDD,则至少要在生产代码的同时编写测试,即编写方法,然后编写其测试。 该技术不涉及TDD附带的范式转换,但它比编写所有代码后编写测试要好得多,通常开发人员认为这很乏味。 每个场景都应该有一个测试,将其翻译成简明的英语意味着您代码的每条路径:每个if语句的两端和switch语句的每种情况。 简而言之,每个项目都应具有数百个单元测试,并且您应该确信,如果更改部分代码,则不会破坏某些内容。

存根
存根用于将被测对象与系统其余部分隔离。 它们是被注入到您的对象中以在测试情况下替换实际对象的对象。 马丁·福勒(Martin Fowler)在他的论文《莫克斯不是存根》中将存根定义为:

“存根提供对测试过程中进行的呼叫的固定答复,通常通常根本不响应测试中编程的内容。 存根还可以记录有关呼叫的信息,例如电子邮件网关存根,它可以记住“已发送”的消息,或者仅记住“已发送”的消息数量。”

…从单元测试的艺术中得出的类似定义是:

“存根是系统中现有依赖项(或协作者 )的可控替代。 通过使用存根,您可以测试代码而无需直接使用依赖项。”

cks
模拟是用于模仿或模拟生产对象的行为或角色的替换对象。 这实际上意味着检查被测对象是否按预期调用了模拟对象上的方法,如果没有,则测试失败。 因此,您是在断言方法调用的正确性和通过代码的执行路径,而不是在常规单元测试的情况下断言被测试方法的返回值。

整合测试
集成测试与单元测试相反。 集成测试背后的想法是证明您的对象相互协作以及围绕它们的系统。 套用迈克尔羽毛,集成测试

  1. 与数据库对话。
  2. 通过网络进行通信。
  3. 触摸文件系统。
  4. 要求您对环境做一些特殊的事情(例如编辑配置文件)以运行它。

单元测试领域的Roy Osherove指出,“集成测试意味着将两个或更多或更多依赖软件模块作为一个组一起测试”。 对我而言,这毕竟使定义受到了太多限制,在测试单个模块中的对象时,您可以访问数据库或文件系统,同时确定对象是否可以协作。

在我之前从事的项目中,通常会有一个专门编写用于集成测试的模块。 这是因为集成测试的数量少于单元测试(可能以1:10的比率),并且由于它们访问环境的事实通常要慢得多,因此将所有集成测试合并到自己的Maven模块中意味着他们不必在每次构建模块时都运行,从而加快了构建和开发时间。

端到端集成测试
我已经在本系列的第二篇博客中详细介绍了端到端测试,因此总而言之,可以将它们定义为集成测试的一种特殊情况,因为该测试始于系统边界或刚好位于系统边界之后,并通过系统的所有层。 系统边界或系统边界后面是一个有争议的问题。 对于Spring MVC应用而言,没有理由不应该从控制器代码开始进行端到端测试,而忽略浏览器和调度程序servlet。 毕竟,我怀疑Spring的家伙已经彻底测试了他们的代码,那么为什么还要浪费时间测试它呢? 另外,测试前端看起来像是一整个鱼缸。

(1)我经常怀疑测试技术实际上并没有在拼贴画和大学中教授,但是我没有任何证据。 如果有任何学者可以告诉我,单元测试是受教,受鼓励的,并且是计算机科学学位课程的组成部分,那么我很高兴听到他们的来信。

参考:“ 一些定义–测试技术9”(来自Captain Debug's Blog的 JCG合作伙伴 Roger Hughes)。

相关文章 :

  • 测试技巧–不编写测试
  • 端到端测试的滥用–测试技术2
  • 您应该对什么进行单元测试? –测试技术3
  • 常规单元测试和存根–测​​试技术4
  • 使用模拟的单元测试–测试技术5
  • 为旧版代码创建存根–测试技术6
  • 有关为旧版代码创建存根的更多信息–测试技术7
  • 为什么要编写单元测试–测试技巧8

翻译自: https://www.javacodegeeks.com/2011/12/some-definitions-testing-techniques-9.html

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

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

相关文章

百度谷歌面试题目

全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题] 整理:July、二零一一年三月九日。应网友承诺与要求,全新整理。转载,请注明出处。博主说明:此100题V0.2版,本人不再保证,还会提供答案。-------…

C学习杂记(三)笔试题:字符串大小写字母切换

字符串大小写转换&#xff0c;大写转小写&#xff0c; 小写转大写 #include <stdio.h> #include <string.h>int tramsform(char str[]) {int i 0;int strLen strlen(str);for(i 0; i < strLen; i){if( (str[i] > A) && (str[i] < Z) ){str[i]…

m.2接口和nvme区别_NVMe/SATA SSD有啥不一样?萌新怎么选

随着NAND技术的升级迭代&#xff0c;堆栈层数不断提高使得SSD单位容量成本不断下降&#xff0c;消费级市场基本已经成为了SSD的天下。目前主流的SSD大致有两种接口&#xff0c;分别是M.2和SATA两种类型。NVMe/SATA有啥区别SATA接口的SSD执行的AHCI协议标准&#xff0c;是目前较…

javascript 高级特性探讨A4-A5(call和原型.对象复制)

在js中&#xff0c;call和apply是二个神奇的方法&#xff0c;但同时也是容易令人迷惑的二个方法&#xff0c;call和apply的功能是以不同的对象作为上下文来调用某个函数的&#xff0c;简而言之&#xff0c;就是允许一个对象去调用另一个对象的成员函数&#xff0c;咋一看似乎很…

带有NetBeans 7.1 RC 2的WebLogic 12c快速入门

WebLogic服务器12c停运了几天。 它是针对“裸露”的Java开发人员的–花哨的Fusion Middleware东西将继续沿线升至12c。 因此&#xff0c;这基本上是我要运行的版本。 今天&#xff0c;我为您提供了一个最新的NetBeans 7.1&#xff08;RC 2&#xff09;和WebLogic的快速入门 &am…

C学习杂记(四)sizeof计算联合体大小

#include <stdio.h>union u1 {char a[13];int b; };int main(void) {printf("%d\n", sizeof(u1));return 0; } 结果为16。 联合体的大小取决于它所有的成员中占用空间最大的一个成员的大小。u2最大的空间是char[13]&#xff0c;但是因为另一个成员int b的存在…

python爬虫反爬机制_Python Scrapy突破反爬虫机制(项目实践)

对于 BOSS 直聘这种网站&#xff0c;当程序请求网页后&#xff0c;服务器响应内容包含了整个页面的 HTML 源代码&#xff0c;这样就可以使用爬虫来爬取数据。但有些网站做了一些“反爬虫”处理&#xff0c;其网页内容不是静态的&#xff0c;而是使用 JavaScript 动态加载的&…

树的算法 已知二叉树的前序序列和中序序列求解树

题目: 已知二叉树的前序序列和中序序列求解树 比如 6 4    8 3  5   7 前序序列为6,4,3,5,8,7 中序序列为3,4,5,6,7,8 思路: 前序遍历序列的第一个元素必为根节点 则中序遍历序列中&#xff0c;该节点之前的为左子树&#xff0c;该节点之后的为右子树&#xff0c;若该节…

使用Spring配置LogBack日志记录

LogBack是由Log4j的同一作者创建的用于记录日志的API&#xff08;较新的实现&#xff0c;它类似于新版本&#xff09;&#xff0c;在本文中&#xff0c;我将展示如何在Spring项目中对其进行集成和使用。 在本教程中&#xff0c;我假设您正在使用一个简单的Spring ROO项目&…

自定义URL Scheme完全指南

iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上&#xff0c;该 scheme 用于从浏览器或其他应用中启动本应用。 注册自定义 URL Scheme 注册自定义 URL Scheme 的第一步是创建 URL Scheme — 在 Xcode Project Navigator 中找到并点击工程…

C学习杂记(五)形参实参笔试题

大意失荆州 不要以为简单就轻视&#xff0c;谨慎&#xff0c;细节&#xff0c;基础。 一、有以下程序 #include <stdio.h>typedef struct {int b, p;} A;void f(A c) {c.b 1; c.p 2; }void main(void) {A a {1, 2};f(a);printf("%d, %d\n", a.b, a.p); } …

avframe转byte数组_C# amp; VB6.0 图像与二维数组 互转

背景最近在研究C#进行图像处理&#xff0c;在图像处理中算法中&#xff0c;往往都是针对的是矩阵运算的。矩阵其实就是一个二维的数组。为了图像处理的速度&#xff0c;我们都需要放在内存中处理。但网络上收集的代码&#xff0c;往往都是以一维数组的样子提供结果&#xff0c;…

C学习杂记(六)%2.0f打印输出宽度

%m.nf&#xff0c;m表示整个浮点数的输出宽度&#xff0c;n表示小数输出宽度。 1、printf("%f\n", 12.34); 输出为12.340000。 2、printf("%2.0f\n", 12.34); 输出为12。 3、printf("%2.1f\n", 12.34); 输出为12.3。 4、printf(&qu…

P6 音频格式—— AAC

目录 前言 01 AAC是什么&#xff1f; 02 为什么需要进行AAC进行音频压缩处理&#xff1f; 03 AAC的特点以及优势 04 AAC格式详解&#xff1a; 4.1. ADIF的数据结构&#xff1a; 4.1.1 ADIF Header具体的表格: 4.2. ADTS的结构&#xff08;重点&#xff09;&#xff1a; …

Android开发笔记——ListView模块、缓存及性能

ListView是Android开发中最常用的组件之一。本文将重点说明如何正确使用ListView&#xff0c;以及使用过程中可能遇到的问题。 ListView开发模块图片缓存可能遇到的问题一、ListView开发模块 从项目实践的角度来看&#xff0c;ListView适合“自底向上”的开发模式&#xff0c;即…

python实现excel筛选功能并输出_python如何实现excel按颜色筛选功能

离岛 2020-07-09 09:37 已采纳 不太了解具体需求&#xff0c;提供一些示例代码和思路供你参考&#xff1a; 整体思路&#xff1a;首先已知excel中的颜色值&#xff0c;根据编码实现颜色筛选的功能 示例&#xff1a; 1、首先安装pip install openpyxl 2、示例代码可以获取Excel中…

什么是CDI,它与@EJB和Spring有什么关系?

简要概述了Java EE中的依赖项注入&#xff0c; Resource / EJB和Inject之间的区别以及它们与Spring的关系-主要是链接形式。 上下文依赖注入&#xff08;CDI&#xff0c; JSR 299 &#xff09;是Java EE 6 Web Profile的一部分&#xff0c;它本身基于Java依赖注入&#xff08;…

C学习杂记(七)extern声明可省略变量类型

工作三年&#xff0c;看C的书也不少。第一次知道extern可以省略变量类型。 b.c有一个全局变量unsigned int data_length&#xff0c;a.c想要调用它&#xff0c;通常使用: extern unsigned int data_length&#xff1b; 在声明时可以把外部变量类型去掉&#xff1a;extern da…

KMP模板

1 ///KMP模板2 ///生成next数组3 void get_next()4 {5 int i0,j-1;6 next[0]-1;7 while (s1[i])8 {9 if (j-1||s1[i]s1[j]) 10 { 11 i; 12 j; 13 next[i]j; 14 } 15 else jnext[j]; 16 …

使用Apache CXF进行Web服务学习

在我的最后几个项目中&#xff0c;我使用了Web服务&#xff0c;在某些地方创建它们并在其他地方使用它们。 我觉得创建客户端&#xff0c;创建Web服务等标准任务非常简单&#xff0c;如果遇到问题&#xff0c;有足够的资源。 但是对于Web服务&#xff0c;这是一项琐碎的任务&am…