用Cucumber JVM编写BDD测试
Cucumber JVM是编写BDD测试的出色工具。在本文中,我想对Cucumber JVM的BDD进行介绍。
让我们开始吧…
什么是BDD?
简而言之,BDD试图解决“通过示例理解需求”的问题
BDD工具
有许多用于BDD的工具,有趣的是,您可以在列表中找到很多蔬菜名称:)黄瓜,菠菜,生菜,JBehave,Twist等。这些黄瓜中的这些简单易用。
黄瓜JVM
Cucumber用Ruby编写,而Cucumber JVM是适用于Java,Scala,Groovy,Clojure等流行JVM语言的Cucumber的实现。
黄瓜堆栈
我们使用“无处不在”语言编写功能和场景,然后使用步骤定义和支持代码来实现它们。
功能文件和小黄瓜
首先,您需要编写一个.feature文件。通常,功能文件以Feature关键字开头,后跟Scenario 。 每个方案都包含多个步骤。 黄瓜为此使用了黄瓜。 Gherkin是一种商业可读的特定于域的语言,可让您描述软件的行为而无需详细说明如何实现该行为。
例:
Feature: Placing bets Scenario: Place a bet with cash balance Given I have an account with cash balance of 100 When I place a bet of 10 on "SB_PRE_MATCH" Then the bet should be placed successfully And the remaining balance in my account should be 90
如您所见,特征文件更像是带有小黄瓜关键字的口语,例如Feature,Scenario,Give,When,When,And和#。
步骤定义
在完成了具有不同场景的功能文件后,下一步就是通过编写步骤定义使场景栩栩如生。 Cucumber使用正则表达式将步骤与实际步骤定义进行映射。 可以使用您选择的JVM语言编写步骤定义。 映射步骤定义时,将忽略关键字。 因此,参考上面的示例功能,我们将必须为所有四个步骤编写步骤定义。 使用IDE插件为您生成存根。
import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class PlaceBetStepDefs { @Given("^I have an account with cash balance of (\\d+) $") public void accountWithBalance(int balance) throws Throwable { // Write code here that turns the phrase above into concrete actions //throw new PendingException(); } @When("^I place a bet of (\\d+) on \"(.*?)\"$") public void placeBet(int stake, String product) throws Throwable { // Write code here that turns the phrase above into concrete actions // throw new PendingException(); } @Then("^the bet should be placed successfully$") public void theBetShouldBePlacedSuccessfully() throws Throwable { // Write code here that turns the phrase above into concrete actions //throw new PendingException(); } @And("^the remaining balance in my account should be (\\d+)$") public void assertRemainingBalance(int remaining) throws Throwable { // Write code here that turns the phrase above into concrete actions //throw new PendingException(); }
}
支持代码
下一步是使用支持代码来支持您的步骤定义。 例如,您可以进行REST调用以执行该步骤,或者进行数据库调用或使用诸如selenium之类的Web驱动程序。 这完全取决于实施情况。 获得响应后,您可以使用期望的结果对其进行断言,或者将其映射到您的域对象。 例如,您可以使用Selenium Web驱动程序来模拟登录到站点:
protected WebDriver driver;
@Before("@startbrowser")
public void setup() { System.setProperty("webdriver.chrome.driver", "C:\\devel\\projects\\cucumberworkshop\\chromedriver.exe"); driver = new ChromeDriver();
}
@Given("^I open google$")
public void I_open_google() throws Throwable { driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get("https://www.google.co.uk");
}
表现场景
黄瓜提供了更多选项,可以更好地组织您的方案。
- 背景 –使用它来定义所有方案通用的步骤
- 数据表 –您可以表格式写入输入数据
- 方案大纲-方案的占位符,可以对称为示例的一组数据执行。
- 标签和子文件夹来组织您的功能-标签更像是文档的便笺。
依赖注入
通常,您可能不得不将一步创建的信息传递给另一步。 例如,您在第一步中创建一个域对象,然后在第二步中需要使用它。 做到这一点的干净方法是通过依赖注入。 Cucumber为主要的DI容器(例如Spring,Guice,Pico等)提供模块。
执行黄瓜
在IntelliJ IDE上运行Cucumber非常容易。 它也可以与您的构建系统集成。 您还可以使用其他选项控制要运行的测试。
报告选项
有许多可用于报告的插件。 例如,您可以将Master Thought插件用于报告。
参考文献
《 Cucumber for Java》一书 –这是一本非常好的书,这是您入门所需的一切。 文档 GitHub链接那就是所有的人。 希望你喜欢它。 圣诞快乐! 请享用。
翻译自: https://www.javacodegeeks.com/2015/12/writing-bdd-tests-cucumber-jvm.html
用Cucumber JVM编写BDD测试相关推荐
- cucumber jvm_用Cucumber JVM编写BDD测试
cucumber jvm Cucumber JVM是编写BDD测试的出色工具.在本文中,我想对Cucumber JVM的BDD进行介绍. 让我们开始吧- 什么是BDD? 简而言之,BDD试图解决&qu ...
- cucumber测试_如何在Cucumber中进行后端测试
cucumber测试 Cucumber是一种规范语言的执行框架. 它并不是要成为测试语言,而是用于创建测试自动化. Cucumber最适合出现一些实际参与者互动并取得某种成果的情况. 当可以从用户的角 ...
- BDD测试框架Spock概要
前言 为了找到一个适合自己的.更具操作性的.以DDD为核心的开发方法,我最近一直在摸索如何揉合BDD与DDD.围绕这个目标,我找到了Impact Mapping → Cucumber → Spock ...
- java bdd 框架_开发者测试: 实现BDD测试框架(JSpec)
There are two ways of constructing a software design. One way is to make it so simple that there are ...
- 《编写可测试的JavaScript代码》——1.4 小结
本节书摘来自异步社区<编写可测试的JavaScript代码>一书中的第1章,第1.4节,作者: [美]Mark Ethan Trostler 译者: 徐涛 更多章节内容可以访问云栖社区&q ...
- 编写junit 测试_编写JUnit测试的另一种方法(Jasmine方法)
编写junit 测试 最近,我为一个小型个人项目编写了很多Jasmine测试. 我花了一些时间才终于感到正确地完成了测试. 在此之后,当切换回JUnit测试时,我总是很难过. 由于某种原因,JUnit ...
- 编写JUnit测试的另一种方法(Jasmine方法)
最近,我为一个小型个人项目编写了很多Jasmine测试. 我花了一些时间才终于感到正确地完成了测试. 此后,当我切换回JUnit测试时,我总是很难过. 出于某种原因,JUnit测试不再那么好,我想知道 ...
- BDD - SpecFlow BDD 测试实践 SpecFlow 模板
BDD - SpecFlow BDD 测试实践 SpecFlow 模板 引言 安装 SpecFlow's Visual Studio 插件 创建被测程序 创建 SpecFlow 项目 绑定实现第一个 ...
- 如何编写可测试的代码 哈利勒的方法论
Understanding how to write testable code is one of the biggest frustrations I had when I finished sc ...
最新文章
- IDEA提升研发效能—高效定位篇
- JavaScript的语言组成
- 下面哪个字段是http请求中必须具备的_HTTP协议及其工作原理介绍
- C#开发Unity游戏教程之Scene视图与脚本的使用
- (19)C++项目练习二----------【音乐播放器】
- ios 的touch事件分析
- ubuntu的sudo输入密码时光标不动的问题
- 深信服上网管理设备基本操作
- CF453C-Little Pony and Summer Sun Celebration【构造】
- pandas 根据列名索引多列数据_Pandas 数据聚合与分组运算[groupby+apply]速查笔记
- 一些算法(最短路,线段树,01,完全背包,STL)的基本参考资料
- 云服务器安全组配置(阿里云,ucloud云,华为云)
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-4.动态Sql语句Mybaties SqlProvider...
- 华为手机打开日志输出的几种方法
- 轻量级分布式日志管理系统Graylog、Loki及ELK的分析和对比
- linux dos2unix用法,Linux命令之dos2unix
- 计算机音乐谱东演员,计算机音乐谱光辉岁
- 《暗时间》读后感(一)——确实需要学习一些心理学有关的内容
- ode45matlab例子,ode45(ode45用法举例)
- c语言isfinite_visual-c-std :: isfinite在MSVC上
热门文章
- Wamp升级php到7.3版本
- SpringAOP之代理设计模式
- 天平游码读数例题_初二上册物理实验——托盘天平使用的注意事项
- 雨滴桌面时间插件_Win10美化向——如何搭配你的桌面
- 为什么jdk的CLASSPATH环境变量需要设置rt.jar 和 tools.jar
- Java 泛型实现方法 — 擦拭法
- hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
- java oca_OCA第4部分中的Java难题
- prima evb_用Priam设置Cassandra
- 垃圾收集 java_Java的内置垃圾收集如何使您的生活更美好(大部分时间)