java cucumber_为Java + STANDARD值引入Cucumber

java cucumber

作为软件开发人员,我们都有最喜欢的工具来使我们成功。 许多人在开始工作时就很适合这份工作,但很快就不见了。 其他人则需要太多的设置和培训才能“将脚趾浸入水中”,只是为了简单地确定它们是否是正确的工具即可。

Cucumber JVM是一个测试框架,它增强了JUnit ,从而提供了一种更轻松的方式来开始进行行为驱动开发(BDD)。 Gherkin语言 (Cucumber理解的语言)使软件或质量工程师可以更轻松地用文字描述有关软件应用程序中预期行为的方案。

对我而言,Cucumber允许表达哪些方案是自动化的,而无需“深入了解”并阅读Java代码。 这个简短的博客描述了我为什么使用它,以及使用方法的提示,这些提示可能与大多数情况有所不同。

应用程序发展与需求变化

我认为,软件需求规范更多是一种艺术形式。 如果我们可以询问业务主题专家(SME),他们希望应用程序做什么,并让他们抽象地提供所有必要的细节,那就太好了。 不幸的是,在过去30多年中,我从事的每个试图预先收集需求的项目都不可避免地遇到了在开发过程中更改或误解需求的情况,这使所有需求都尚未实现。

作为敏捷方法论的支持者,我相信最好的应用会不断发展。 需求必须随着时间而成形。 这个概念使僵化的项目经理甚至利益相关者发疯。 “如果我不确切知道每个版本的要求,我该如何计划三年?”

该主题可以提供其自己的博客,但现在让我们简单地期望在项目的所有阶段都将发生需求变更。 能够快速有效地做出React是敏捷开发的全部意义所在。

因此,如果将12个月的项目中的5个月进行了改进,这是5个月的工作前提,那么如何确保对已编写和测试的代码所做的更改不会引起回归问题?

为什么要使用Cucumber?

Cucumber和JUnit是使我能够自动化应用程序的重要功能和使用场景的工具。 作为一个敏捷的开发人员,我必须期望我将重构代码和设计以响应需求变化。 我编写的单元测试和集成测试使我有信心,过去测试过的方案仍然可以使用。 这就是为什么我们要进行单元测试,但是仍然存在为什么要使用Cucumber的问题?

对我来说,当我领导的一个项目决定转向JEE6,CDI和Interceptors时,Cucumber出现在了现场。 这些概念全部重用服务,并使用面向方面的编程将业务规则行为插入服务方法。 也就是说,我们决定使用Java拦截器来确保在每次服务方法调用开始之前都满足业务规则。

那么,您到底如何测试这样的概念? 我不仅需要正确测试我的业务逻辑,还需要一个测试环境,该环境可以模拟我的容器行为,以便对适当的集成测试进行编码。

那时,实际上只有一套可以处理这种环境的工具:Cucumber和Arquillian。 Arquillian是Redhat的测试框架,可让您“收缩包装”可在测试容器中使用的可部署资源,从而使集成测试真正在容器中运行。 如何设置它并使其起作用是比我在这里要讲的更高级的话题,但是从Arquillian Cucumber测试环境开始并不是要把脚趾浸入水中。 它更像是在漂着水母。

无论如何,该测试都需要我驱使我更多地研究Cucumber作为测试工具,这使我对BDD环境的多种可能性大开眼界。

现在就举一个很好的例子。

到目前为止,这听起来像是一个推销活动,但让我演示一下Cucumber测试的外观。 让我们以1040EZ表格为例。

JavaCucumber实例

如果我们正在为此编写应用程序,则可能需要以下方案:

Feature: Form 1040EZScenario: Too much taxable interestGiven standard error messagesAnd Form line 1 contains $30,000.00And Form line 2 contains $1,501.00When Form is submittedThen an error message with id F1040EZ-1 is shown

因此,让我们剖析这种情况。 Feature and Scenario词汇只是用于帮助描述我们通常测试的内容以及特定场景的内容的文本。 给定“何时”和“然后”语法是一种常见的按规范测试的术语,用于区分方案的不同部分。

  • “给出”用于描述测试的设置。
  • “何时”通常描述您正在测试的Java方法以及提供给它的参数。 我们的示例没有参数。
  • “然后”用于描述执行该方法的结果。 有时有消息; 其他时间则有预期的特定数据; 其他情况只是测试没有破裂或更改。

如果您采用这种简单的纳税表,则可能会发现许多其他情况,例如:

  • 未指定所需值
  • 矛盾的输入
  • 无效数据,例如负数或期望数字的文本
  • 有效方案,例如退款和付款

在这个简单的税收示例中,有很多情况。 对于更复杂的形式,可能要测试数百种可能的方案。 测试的技巧是找到合适的,可管理的测试数量来编写。

对于我们的简单场景,Given-When-Then文本将作为“ .feature”文件存储在Java代码的资源中。 通常,所有功能文件都存储在一组模仿Java包结构的文件夹中。 实际上,为了简化测试,您可以在与该文件夹结构匹配的程序包中创建Java类来测试此功能。

Java类在Cucumber中被称为Steps文件,它定义了要为每个Step运行的Java代码,它们简单地是Given,When或Then。 使用@ Given,@ When和@Then批注的步骤与功能步骤匹配,这些批注具有用于进行匹配的正则表达式参数。

请参阅Cucumber文档,以获得更好的示例以及有关如何将它们组合在一起的更多详细信息。

使用标准值编写Cucumber脚本的技巧

如上面的示例所述,“给定”步骤设置了方案。 在我们的简单场景中,第一个Given似乎隐藏了一些重要数据。 具体来说,该应用程序的标准消息是什么? 更复杂的场景可能依赖于大量的预定义数据。

Cucumber提供了在表中列出给定数据的方法,因此您可以在每个“给定”步骤中非常明确地显示相关的设置数据。 但是,这甚至会使最简单的场景变得如此冗长,以至于没有人会尝试阅读它们。

在我当前的项目中,我们已经进行了集成测试,以至于有数百行设置数据。 因此,我们大多数情况都始于:

Given STANDARD values for …..

“……” 用关键字替换,该关键字列出应为标准对象提供哪些对象。 这使每个方案简洁明了,但是如果非开发人员正在查看该方案,他们如何知道标准值是什么?

我们对此的解决方案是提供一个StandardObjects.feature文件。 该文件与所有其他文件一样以“给...提供标准值”开头,但是每个方案都有一个“然后”步骤,该步骤显示该标准对象的期望值表。

在上面的示例中,我们有:

Given standard error messages

使用此STANDARD值功能方法,我们将重用Given并提供一个Then,如下所示:

Then standard error messages would include exactly the following:| id		| message						 		                          |
| F1040EZ-1	|If taxable interest is greater than $1500, you cannot use 1040EZ | 
| F1040EZ-2	|Line X is required							                      |
| F1040EZ-3	|Value on line X is not valid						              |

将标准值期望值分离到一个单独的功能可以使功能方案变得混乱,但仍可以看到标准值是什么。 但是,请注意,随着标准值的更改或添加,必须更新功能文件。 但是我认为这是一件好事。

最后的想法

能够快速有效地做出React是敏捷开发的全部意义所在。 Cucumber是一种工具,它使我能够自动化应用程序的重要功能和使用场景。 该博客描述了为什么我使用Cucumber来帮助实现该目标,以及如何使用它的技巧。 您也可以在此处查看有关此主题的另一个Keyhole博客。

需求的变更将在项目的所有阶段发生,但是如果您拥有适当的工具,就可以避免痛苦。

翻译自: https://www.javacodegeeks.com/2016/01/introducing-cucumber-java-standard-values.html

java cucumber

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

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

相关文章

文章id 文章标题点击量php,WordPress如何通过文章ID获取文章标题等信息

如果我们想要在某一个主题的php文件中调用文章的标题,内容等信息,而在WordPress中唯一一直不会改变的就是文章发布时生成的ID,我们只需要获取文章的ID,即可通过文章ID来获取我们想要的文章信息。调用方法php$id // 文章的 id$tit…

javaone_JavaOne 2015:高级模块化开发

javaoneJavaOne 2015看到了Project Jigsaw团队关于Java 9中的模块化的一系列讨论 。它们都是非常有趣的,并且充满了宝贵的信息,我敦促每个Java开发人员都注意它们。 除此之外,我想给社区一种搜索和引用它们的方法,因此我在这里总…

spark rest_Spark简介,您的下一个REST Java框架

spark rest我希望您今年Java来了! 今天,我们将研究一个清新,简单,美观且实用的框架,以Java编写REST应用程序。 它将非常简单,甚至根本不会看起来像Java。 我们将研究Spark Web框架。 不,它与Ap…

oracle 授权 增删改查权限_Oracle增删改查与函数

SQL -- 结构化查询语言 关系型数据库分类: DDL DML DCL DQL TCL Oracle 的数据类型:字符 char() varchar2()数字 number(p,s)时间 date timestamp 文件 clob blob 二维表 table 创建表 CREATE create table 表名 ( 列名 数据类型 [约束], 列名 类型 ... …

_用WSL,MobaXterm,Cmder配置linux开发环境

离不开Windows的理由很多,作为后端开发需要使用linux的情况也很多,双系统总归是不方便,而且linux下的GUI体验也没用Win 10好. 如果使用虚拟机,那么文件交换和网络等各种问题也需要解决,对系统的内存要求也更高一些.微软为了让更多的开发人员留在Win10上面,开发了WSL功能.目前的…

php中上传图片怎么显示出来,PHP上传图片类显示缩略图功能

有缩略图功能 但是 感觉不全面,而且有点问题,继续学习,将来以后修改下/*** Created by PhpStorm.* User: Administrator* Date: 2016/6/28* Time: 21:04*/class upload{protected $fileMine;//文件上传类型protected $filepath;//文件上传路径…

javaparser_JavaParser入门:以编程方式分析Java代码

javaparser我最喜欢的事情之一是解析代码并对其执行自动操作。 因此,我开始为JavaParser做出贡献,并创建了两个相关项目: java-symbol-solver和Effectivejava 。 作为JavaParser的贡献者,我反复阅读了一些有关从Java源代码提取信…

wps xml转换表格_这功能WPS卖近百元?教你免费将PDF转成Word

[PConline 应用]PDF文件如何转换成为Word?很多朋友研究这个问题已经很久了,PDF更利于统一格式传播,Word更便于编辑,因此收到PDF文件后、想要修改时要如何将PDF转换成Word可谓是一个刚需。当然,不少办公软件提供了这样的…

睡眠 应该用 a加权 c加权_在神经网络中提取知识:学习用较小的模型学得更好...

在传统的机器学习中,为了获得最先进的(SOTA)性能,我们经常训练一系列整合模型来克服单个模型的弱点。 但是,要获得SOTA性能,通常需要使用具有数百万个参数的大型模型进行大量计算。 SOTA模型(例如VGG16 / 19,ResNet50)…

gpu编程如何一步步学习_如何学习贴片机编程

学习贴片机编程首选要对贴片机有所熟悉了解,另外对常用的电脑编辑软件要会使用。目前通常学习贴片机编程有专门的培训学校,或者跟着生产线上现有的贴片机编程师傅学习熟练后再进行编程操作。下面深圳智驰科技就来分享一下如何学习贴片机编程。对贴片机编…

plotcylinder matlab,Matlab在任意两点之间绘制三维圆柱

Matlab在任意两点之间绘制三维圆柱Matlab在任意两点之间绘制三维圆柱此函数可能存在一些不足,请多多指教!function plotcylinder(u1,u2,color_a,r)Lnorm(u1-u2);RODu2-u1;[X,Y,Z]cylinder(r,100);x1X*0;y1Y*0;z1Z*0;ZL*Z-L/2;ROD_midpoint(u1u2)/2;xROD_…

jdk8和hotspot_HotSpot的-XshowSettings标志的简单性和价值

jdk8和hotspot一个方便的HotSpot JVM标志 ( 选项为Java启动 java )是-XshowSettings选项。 Oracle Java启动器描述页面中对此选项进行了如下描述 : -XshowSettings : category显示设置并继续。 该选项的可能类别参数包括&#xf…

matlab信号分割与比对,matlab测量计算信号的相似度

本示例说明如何测量信号相似度。将回答以下问题:如何比较具有不同长度或不同采样率的信号?如何确定测量中是否存在信号或仅有噪声?有两个信号相关吗?如何测量两个信号之间的延迟?比较具有不同采样率的信号考虑一个音频…

Spring Bootstrap中具有配置元数据的高级配置

在简要介绍了配置元数据并涵盖了我之前的文章《 在Spring Boot中使用配置元数据Pimp您的配置》中的基础知识之后,现在该看看如何进一步执行此步骤并进一步自定义配置。 在这篇文章中,我计划提出对配置属性的弃用,并讨论各种值提供程序&#x…

ssh 与 telnet 有何不同?_采用创新面料Nike Infinalon的全新瑜珈系列究竟有何不同?...

采用创新面料Nike Infinalon的全新瑜珈系列究竟有何不同?无拘无束自由运动——这是耐克瑜伽系列新品的核心设计理念。全新系列为你提供垫上瑜伽时毫无束缚的舒适感,采用了耐克创新型面料:Nike Infinalon。Nike Infinalon应用于耐克最新瑜伽系…

matlab中的导函数驻点,Matlab用导数作定性分析

Matlab用导数作定性分析5.1知识要点:函数作图 —用导数定性描述函数【 clf,xlinspace(-8,8,30);f(x-3).^2./(4*(x-1)); plot(x,f) 】【 fplot((x-3)^2/(4*(x-1)),[-8,8])) 】【 clf,xsym(x); f(x-3)^2/(4*(x-1)); ezplot(f,[-8,8]) ,ti…

原生态基于OpenCV图像处理软件开发

部分功能效果图 GitHub:https://github.com/CnYiXiaoNaiHe/OpenCV- 持续更新

git.exe 启动 慢_四川成都surface电脑启动到一半黑屏维修服务地址电话

联系人:刘工 欢迎来电 地址:成都市一环路南二段1号(磨子桥口)数码科技大厦(新世纪电脑城对面)4楼413专业surface全系列维修因为专注,所以专注,所以surface配件都有现货。微软电脑,微软平板电脑专业维修服务点surface R…

【FFMPEG应用篇】基于C++使用ffmpeg和QT开发播放器

音视频基础知识 1.MPEG-4是一套用于音频,视频信息的亚索编码标准。 2.常见的封装格式 MP4 MOV AVI:压缩标准可以任意选择 FLV :FLV封装格式详细参考 TS:直播流媒体使用; 3.常用视频编码格式 H264&#xff0…

java代码自动生成的插件_如何使用插件生成自定义Java 8代码

java代码自动生成的插件大多数程序员讨厌的一件事就是编写样板代码。 无休止的时间花费在设置实体类和配置数据库连接上。 为了避免这种情况,您可以让Speedment Open Source之类的程序为您生成所有这些代码。 这样可以很容易地以最少的人工就可以启动和运行数据库项…