端到端测试_端到端测试的滥用–测试技术2

端到端测试

我的上一个博客是有关测试代码方法的一系列博客中的第一篇,概述了使用一种非常常见的模式从数据库检索地址的简单方案:

…并描述了一种非常通用的测试技术: 不编写测试而是手动进行所有操作。

今天的博客涵盖了另一种实践,我也认为这是次优的。 在这种情况下,开发人员使用JUnit编写测试,但是在完成编写代码之后并且没有任何类隔离的情况下编写测试。 这实际上是冒充单元测试的“端到端”(又称集成)测试。

尽管昨天我说过我只测试AddressService类,但是使用此技术的测试首先从数据库中加载一些测试数据,然后抓住AddressController来调用被测方法。 AddressController调用AddressService ,然后再调用AddressDao以获取并返回所请求的数据。

@RunWith(UnitilsJUnit4TestClassRunner.class)
@SpringApplicationContext("servlet-context.xml")
@Transactional(TransactionMode.DISABLED)
public class EndToEndAddressServiceTest {@SpringBeanByTypeprivate AddressController instance;/*** Test method for* {@link com.captaindebug.address.AddressService#findAddress(int)}.*/@Testpublic void testFindAddressWithNoAddress() {final int id = 10;BindingAwareModelMap model = new BindingAwareModelMap();String result = instance.findAddress(id, model);assertEquals("address-display", result);Address resultAddress = (Address) model.get("address");assertEquals(Address.INVALID_ADDRESS, resultAddress);}/*** Test method for* {@link com.captaindebug.address.AddressService#findAddress(int)}.*/@Test@DataSet("FindAddress.xml")public void testFindAddress() {final int id = 1;Address expected = new Address(id, "15 My Street", "My Town","POSTCODE", "My Country");BindingAwareModelMap model = new BindingAwareModelMap();String result = instance.findAddress(id, model);assertEquals("address-display", result);Address resultAddress = (Address) model.get("address");assertEquals(expected.getId(), resultAddress.getId());assertEquals(expected.getStreet(), resultAddress.getStreet());assertEquals(expected.getTown(), resultAddress.getTown());assertEquals(expected.getPostCode(), resultAddress.getPostCode());assertEquals(expected.getCountry(), resultAddress.getCountry());}
}

上面的代码使用Unitils将测试数据加载到数据库中并在Spring上下文中加载类。 我发现Nevers是一个有用的工具,它可以消除编写此类测试的繁琐工作,而必须设置如此大规模的测试是一项艰巨的工作。

这种测试必须在代码完成后编写; 它不是测试驱动的开发(从以前的博客中可以看到,我是一个忠实的拥护者),它也不是单元测试。 在代码编写测试的问题之一是必须执行测试的开发人员将其视为琐事而不是开发的一部分,这意味着它通常很匆忙,而并非在编码风格的整洁中完成。

您还需要一定数量的基础结构才能使用此技术进行编码,因为需要建立数据库,而数据库可能会或可能不在您的本地计算机上,因此您可能必须连接到网络才能运行测试。 测试数据要么保存在测试文件中(如本例所示),然后在运行测试时加载到数据库中,要么永久保存在数据库中。 如果需求变更迫使测试发生变更,则通常需要与测试代码一起更新数据库文件,这迫使您至少在两个地方更新测试。

除了缺乏测试对象隔离之外,这种测试的另一个大问题是它们可能非常慢,有时要花几秒钟来执行。 Shane Warden在他的《敏捷开发的艺术》一书中指出,单元测试的运行速度应为“每秒数百”。 沃登还继续引用迈克尔·费瑟(Michael Feather)的书《有效地使用旧版代码》 ,以明确定义什么是单元测试,或者不是:

在以下情况下,测试不是单元测试:

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

…现在我喜欢。

…尽管我不一定同意第三点。 良好的单元测试代码的主要租户之一是可读性。 传递给被测对象的方法参数有时会很大,尤其是在使用XML时。 在这种情况下,我认为支持测试的可读性并将这种大小的数据存储在数据文件中而不是将其作为私有的静态最终String更为实用,因此在可行的情况下,我只坚持第3点。

可以使用第一个首字母缩写来总结单元测试:快速,独立,可重复,自我验证和及时,而Roy Osherove在他的《单元测试的艺术》一书中总结了一个很好的单元测试,其含义是:“自动代码调用了方法或类,然后检查有关该方法或类的逻辑行为的一些假设。 单元测试几乎总是使用单元测试框架编写的。 它可以轻松编写并快速运行。 它是完全自动化的,可信赖的,可读的和可维护的”。

端到端测试的好处是,他们确实会与其他对象和周围环境一起测试您的测试主题,而这在交付代码之前确实是必须要做的。 这意味着完成后,您的代码应包含数百个单元测试,但仅包含数十个“端到端”测试。

鉴于此,当我说技术是“次优”时,我的介绍性前提并不严格。 “端到端”测试没有什么问题,每个项目都应该有一些测试以及一些普通的集成测试,但是这类测试不能替代或称为单元测试,通常是这种情况。

确定了单元测试的内容后,我的下一个博客将调查您应测试的内容以及原因……

参考: Captain Debug博客上的 JCG合作伙伴 的“ 端到端测试的滥用-测试技术2”

相关文章 :

  • 测试技巧–不编写测试
  • 您应该对什么进行单元测试? –测试技术3
  • 常规单元测试和存根–测​​试技术4
  • 使用模拟的单元测试–测试技术5
  • 为旧版代码创建存根-测试技术6
  • 有关为旧版代码创建存根的更多信息–测试技术7
  • 为什么要编写单元测试-测试技巧8
  • 一些定义–测试技术9
  • 使用FindBugs产生更少的错误代码
  • 在云中开发和测试

翻译自: https://www.javacodegeeks.com/2011/11/misuse-of-end-to-end-tests-testing.html

端到端测试

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

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

相关文章

Metasploit 之生成木马(msfvenom)

msfvenom参数 相关参数介绍 -p, --payload <payload> 指定需要使用的payload(攻击荷载) -l, --list [module_type] 列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all -n, --nopsled <length> 为payload预先指定一个NOP滑动长度 -f, --for…

自学前端的误区和痛点解决办法

网上有很多自学的方案路线&#xff0c;还有一些知道&#xff1b;但是我感觉他们很多人都是没有真实学习过的&#xff0c;很多人说的那些路线&#xff0c;真的是扯淡&#xff1b;肯定不是自己通过自学后的感悟&#xff0c;他们所谓的路线可能是结合培训班大纲和知乎的一些答案组…

指纹识别工具(CMSeek)

你喜欢上别人挺好的啊&#xff0c;不然我总觉得我们还有可能。。。 ---- 网易云热评 介绍&#xff1a;一款扫描CMS相关信息的软件&#xff0c;该软件可进行170多个CMS的基本检测&#xff0c;可检测Drupal版本信息&#xff0c;可扫描多个站点 下载地址&#xff08;软件作者&…

kafka监控工具kafkaOffsetMoniter的使用

简介 KafkaOffsetMonitor是由Kafka开源社区提供的一款Web管理界面&#xff0c;用来实时监控Kafka的Consumer以及Partition中的Offset&#xff0c;可以在web界面直观的看到每个Partition的Message的增长速度&#xff0c;是否消费&#xff0c;是否阻塞等。 使用 如果不想编译&…

前端开发攻城狮必须知道的开发环境和插件

前端开发&#xff0c;做到后面&#xff0c;是可以走很多方向的&#xff1b;但是要保证后期的平滑过度&#xff0c;前期还是要把一些必须的知识搞扎实的&#xff1b;下面是我根据自己学习的感悟&#xff0c;写的一些东西&#xff1b;一个网站的流程,由前端工程师 使用 HTMLCSSJa…

hibernate示例_通过示例Hibernate–第1部分(删除孤儿)

hibernate示例所以我想做一系列的冬眠例子&#xff0c;展示冬眠的各种特征。 在第一部分中&#xff0c;我想展示有关删除孤儿功能及其在故事情节中的使用方式。 因此&#xff0c;让我们开始:) 先决条件 &#xff1a; 为了尝试以下示例&#xff0c;您将需要以下提到的JAR文件&…

docker更换国内镜像源

国内下载docker镜像大部分都比较慢&#xff0c;下面给大家介绍2个镜像源。 一、阿里云的docker镜像源 注册一个阿里云用户,访问 https://cr.console.aliyun.com/#/accelerator 获取专属Docker加速器地址 使用的时候修改/etc/docker/daemon.json文件就可以了&#xff0c;修改保…

(转)搞定DC/DC电源转换方案设计,必看金律十一条

[导读] 搞嵌入式的工程师们往往把单片机、ARM、DSP、FPGA搞的得心应手&#xff0c;而一旦进行系统设计&#xff0c;到了给电源系统供电&#xff0c;虽然也能让其精心设计的程序运行起来&#xff0c;但对于新手来说&#xff0c;有时可能效率低下&#xff0c;往往还有供电电流不足…

ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞

ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程代码执行漏洞 漏洞概述: ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架。借鉴Struts框架的Action对象&#xff0c;同时也使用面向对象的开发结构和MVC模式。1月11日&#xff0c;ThinkPHP官方发布新版本5.0.24&#xff0c…

CSDN如何上传视频?

最近想在CSDN上面上传视频&#xff0c;发现找不到入口&#xff0c;包含APP和PC端的博客&#xff0c;无奈之下只能咨询客服&#xff0c; 这个是需要提前申请讲师资格&#xff0c;需要3年以上相关经验。 发布纯IT类视频&#xff0c;先申请讲师&#xff0c;讲师申请 按照提示信息…

【APICloud系列|17】百度开发者平台为了帮助开发者积极开展APP隐私合规风险排查工作, 准确高效的识别违规风险

前段时间开发了一款APP,最近有时间看看了一下自己的邮件。 发现一条比较有意思的。 申请入口 为什么会受到这个邮件呢,因为我安卓上架了华为应用商店、百度手机开放平台,小米应用商店,阿里应用分发平台、腾讯应用宝,360这个不谈,一个IOS的苹果应用商店。 这个只是针对那…

Java数字格式:DecimalFormat

在Java Numeric Formatting一文中 &#xff0c;我描述并演示了NumberFormat静态方法提供的一些有用实例&#xff0c;例如NumberFormat.getNumberInstance&#xff08;Locale&#xff09; &#xff0c; NumberFormat.getPercentInstance&#xff08;Locale&#xff09; &#xf…

微信公众号(订阅号)如何开通付费功能?

前几天看了一下启舰的一个视频中谈到他做自媒体的收入,我记得应该有一年30多万的收入,大概组成是微信公众号广告每个月2万*12个月。两本安卓书收取版权提成,根据出版量8%-10%不等,他一年的出版量在10000左右吧,每本书每个月大概有2000元的样子*12个月,还有一些B站及其他的…

Kunyu(坤舆)

本文转载于&#xff1a;https://www.anquanke.com/post/id/248802 0x00 介绍 工具介绍 Kunyu (坤舆)&#xff0c;名字取自 <坤舆万国全图> &#xff0c;测绘实际上是一个地理信息相关的专业学科&#xff0c;针对海里的、陆地的、天上的地理信息进行盘点。同样应用于网络…

rabbitmq——镜像队列

转自&#xff1a;http://my.oschina.net/hncscwc/blog/186350?p1 1. 镜像队列的设置 镜像队列的配置通过添加policy完成&#xff0c;policy添加的命令为&#xff1a; rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority] -p Vhost: 可选参数&#x…

微信订阅号如何开通付费功能

前几天看了一下启舰的一个视频中谈到他做自媒体的收入&#xff0c;我记得应该有一年30多万的收入&#xff0c;大概组成是微信公众号广告每个月2万*12个月。两本安卓书收取版权提成&#xff0c;根据出版量8%-10%不等&#xff0c;他一年的出版量在10000左右吧&#xff0c;每本书每…

实战sqlmap绕过WAF

本文转载于https://xz.aliyun.com/t/10385 实战演示 通过前期的信息收集发现存在注入的页面如下&#xff1a; 直接使用sqlmap跑发现出现如下错误&#xff1a; python2 sqlmap.py -u "http://xxxx?&daxxtaenull&paramexxxxxx" --batch --delay1 --random…

QQ群群排名如何进行SEO优化?

QQ群排名有多个方面&#xff0c;比如你的qq群名称&#xff0c;人数&#xff0c;还有活跃度等等&#xff0c;很多因素影响你的群排名。下面给大家讲解如何做到搜索第一。第一&#xff1a;群名称群名称一定要和你搜索的关键词相匹配&#xff0c;比如我建的一个粉丝群“爱嵩阁”&a…

Flash不同版本的下载安装及必要的系统组件未正常运行的解决办法

在一个外包平台刷入职培训视频&#xff0c;类似于慕课的课程&#xff0c;需要安装Flash才能播放。一般推荐谷歌浏览器&#xff0c;值得注意的是2020年12月&#xff0c;谷歌浏览器将不再支持flash flash官网 安装步骤 在百度搜索"flash"&#xff0c;点击Flash中国官…

UEditor 任意文件上传漏洞

1 漏洞简介 1.1 漏洞描述 Ueditor是百度开发的一个网站编辑器&#xff0c;目前已经不对其进行后续开发和更新&#xff0c;该漏洞只存在于该编辑器的.net版本。其他的php,jsp,asp版本不受此UEditor的漏洞的影响&#xff0c;.net存在任意文件上传&#xff0c;绕过文件格式的限制…