cucumber jvm_用Cucumber JVM编写BDD测试
cucumber jvm
Cucumber JVM是编写BDD测试的出色工具。在本文中,我想对Cucumber JVM的BDD进行介绍。
让我们开始吧…
什么是BDD?
简而言之,BDD试图解决“通过示例理解需求”的问题
BDD工具
有许多可用于BDD的工具,有趣的是,您可以在列表中找到很多蔬菜名称:)Cucumber,菠菜,生菜,JBehave,Twist等。在这些Cucumber中,简单易用。
CucumberJVM
Cucumber用Ruby编写,而Cucumber JVM是适用于Java,Scala,Groovy,Clojure等流行JVM语言的Cucumber的实现。
Cucumber堆栈
我们使用“无处不在”语言编写功能和场景,然后使用步骤定义和支持代码来实现它们。
功能文件和小Cucumber
首先,您需要编写一个.feature文件。通常,功能文件以Feature关键字开头,后跟Scenario 。 每个方案都包含多个步骤。 Cucumber为此使用了Cucumber。 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
如您所见,特征文件更像是带有小Cucumber关键字的口语,例如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提供了更多选项,可以更好地组织您的方案。
- 背景 –使用它来定义所有方案通用的步骤
- 数据表 –您可以表格式写入输入数据
- 方案大纲-方案的占位符,可以对称为示例的一组数据执行。
- 标签和子文件夹来组织您的功能-标签更像是文档的便笺。
依赖注入
通常,您可能不得不将一步创建的信息传递给另一步。 例如,您在第一步中创建一个域对象,然后在第二步中需要使用它。 做到这一点的干净方法是通过依赖注入。 Cucumber为主要的DI容器(例如Spring,Guice,Pico等)提供模块。
执行Cucumber
在IntelliJ IDE上运行Cucumber非常容易。 它也可以与您的构建系统集成。 您还可以使用其他选项控制要运行的测试。
报告选项
有许多可用于报告的插件。 例如,您可以将Master Thought插件用于报告。
参考资料
《 Cucumber for Java》一书 –这是一本非常好的书,这是您入门所需的全部。 文档 GitHub链接那就是所有的人。 希望你喜欢它。 圣诞快乐! 请享用。
翻译自: https://www.javacodegeeks.com/2015/12/writing-bdd-tests-cucumber-jvm.html
cucumber jvm
cucumber jvm_用Cucumber JVM编写BDD测试相关推荐
- 用Cucumber JVM编写BDD测试
Cucumber JVM是编写BDD测试的出色工具.在本文中,我想对Cucumber JVM的BDD进行介绍. 让我们开始吧- 什么是BDD? 简而言之,BDD试图解决"通过示例理解需求&q ...
- cucumber html模板,Cucumber使用进阶
摘要 本文从实际使用Cucumber这一工具的角度,以Cucumber-JVM实现为基础,采用了不同的事例阐述了:如何编写feature文件,如何从feature文件生成对应的Steps,如何生成不同 ...
- 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 ...
- BDD - SpecFlow BDD 测试实践 SpecFlow 模板
BDD - SpecFlow BDD 测试实践 SpecFlow 模板 引言 安装 SpecFlow's Visual Studio 插件 创建被测程序 创建 SpecFlow 项目 绑定实现第一个 ...
- 《编写可测试的JavaScript代码》——1.4 小结
本节书摘来自异步社区<编写可测试的JavaScript代码>一书中的第1章,第1.4节,作者: [美]Mark Ethan Trostler 译者: 徐涛 更多章节内容可以访问云栖社区&q ...
- 编写junit 测试_编写JUnit测试的另一种方法(Jasmine方法)
编写junit 测试 最近,我为一个小型个人项目编写了很多Jasmine测试. 我花了一些时间才终于感到正确地完成了测试. 在此之后,当切换回JUnit测试时,我总是很难过. 由于某种原因,JUnit ...
- 编写JUnit测试的另一种方法(Jasmine方法)
最近,我为一个小型个人项目编写了很多Jasmine测试. 我花了一些时间才终于感到正确地完成了测试. 此后,当我切换回JUnit测试时,我总是很难过. 出于某种原因,JUnit测试不再那么好,我想知道 ...
- 如何编写可测试的代码 哈利勒的方法论
Understanding how to write testable code is one of the biggest frustrations I had when I finished sc ...
最新文章
- 解决gcc报错:error: implicit declaration of function ‘inet_addr’ [-Werror=implicit-function-declaration]
- ubuntu 客户端ssh连接服务器速度缓慢
- 利用XML配置实体列表
- EasyExcel实现文件读取、导出、上传、下载操作
- P6378-[PA2010]Riddle【2-SAT】
- 数据结构之查找算法:折半查找
- 2021年数智化高峰论坛圆满召开
- wordpress PHP合并js,在WordPress函数文件中包含JS(使用PHP)的最佳实践
- macOS中7个隐藏的技巧
- 计算机如何实现截长图功能,只会Ctrl+Alt+A?告诉你电脑截长图的5大方法
- matlab量化股票基本面,获取数据 - MATLAB - 掘金量化
- 一个基于百度云和图灵的人工智能程序
- Hexo even主题博客配置
- 模拟摄像机和网络摄像机的简要对比
- 大厂面试预备篇——《两万字MySql基础总结》❤️建议收藏
- matlab复信道化滤波器组,宽带数字信道化EDA设计
- r矢量球坐标系旋度_唯心识学075·如何理解三维直角坐标系中的旋度表达式
- win8运行matlab7.0,Win8.1系统中matlab7.0不兼容的解决方法
- 驱动led --GPIO控制
- Discuz提速优化技巧
热门文章
- P5591-小猪佩奇学数学【单位根反演】
- 51nod1676-无向图同构【乱搞】
- P2012-拯救世界2【EGF】
- jzoj4282-[NOIP2015模拟10.29B组]平方数游戏【构造】
- YbtOJ#20064-[NOIP2020模拟赛B组Day4]预算缩减【树形dp】
- P3807-[模板]卢卡斯定理
- 【DP】【高精】幸运票 (jzoj 2122)
- 动态规划训练20 [Treats for the Cows POJ - 3186 ]
- Spark入门(一)单主standalone安装
- 汇编语言(十)之最小偶数