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测试相关推荐

  1. cucumber jvm_用Cucumber JVM编写BDD测试

    cucumber jvm Cucumber JVM是编写BDD测试的出色工具.在本文中,我想对Cucumber JVM的BDD进行介绍. 让我们开始吧- 什么是BDD? 简而言之,BDD试图解决&qu ...

  2. cucumber测试_如何在Cucumber中进行后端测试

    cucumber测试 Cucumber是一种规范语言的执行框架. 它并不是要成为测试语言,而是用于创建测试自动化. Cucumber最适合出现一些实际参与者互动并取得某种成果的情况. 当可以从用户的角 ...

  3. BDD测试框架Spock概要

    前言 为了找到一个适合自己的.更具操作性的.以DDD为核心的开发方法,我最近一直在摸索如何揉合BDD与DDD.围绕这个目标,我找到了Impact Mapping → Cucumber → Spock ...

  4. java bdd 框架_开发者测试: 实现BDD测试框架(JSpec)

    There are two ways of constructing a software design. One way is to make it so simple that there are ...

  5. 《编写可测试的JavaScript代码》——1.4 小结

    本节书摘来自异步社区<编写可测试的JavaScript代码>一书中的第1章,第1.4节,作者: [美]Mark Ethan Trostler 译者: 徐涛 更多章节内容可以访问云栖社区&q ...

  6. 编写junit 测试_编写JUnit测试的另一种方法(Jasmine方法)

    编写junit 测试 最近,我为一个小型个人项目编写了很多Jasmine测试. 我花了一些时间才终于感到正确地完成了测试. 在此之后,当切换回JUnit测试时,我总是很难过. 由于某种原因,JUnit ...

  7. 编写JUnit测试的另一种方法(Jasmine方法)

    最近,我为一个小型个人项目编写了很多Jasmine测试. 我花了一些时间才终于感到正确地完成了测试. 此后,当我切换回JUnit测试时,我总是很难过. 出于某种原因,JUnit测试不再那么好,我想知道 ...

  8. BDD - SpecFlow BDD 测试实践 SpecFlow 模板

    BDD - SpecFlow BDD 测试实践 SpecFlow 模板 引言 安装 SpecFlow's Visual Studio 插件 创建被测程序 创建 SpecFlow 项目 绑定实现第一个 ...

  9. 如何编写可测试的代码 哈利勒的方法论

    Understanding how to write testable code is one of the biggest frustrations I had when I finished sc ...

最新文章

  1. IDEA提升研发效能—高效定位篇
  2. JavaScript的语言组成
  3. 下面哪个字段是http请求中必须具备的_HTTP协议及其工作原理介绍
  4. C#开发Unity游戏教程之Scene视图与脚本的使用
  5. (19)C++项目练习二----------【音乐播放器】
  6. ios 的touch事件分析
  7. ubuntu的sudo输入密码时光标不动的问题
  8. 深信服上网管理设备基本操作
  9. CF453C-Little Pony and Summer Sun Celebration【构造】
  10. pandas 根据列名索引多列数据_Pandas 数据聚合与分组运算[groupby+apply]速查笔记
  11. 一些算法(最短路,线段树,01,完全背包,STL)的基本参考资料
  12. 云服务器安全组配置(阿里云,ucloud云,华为云)
  13. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-4.动态Sql语句Mybaties SqlProvider...
  14. 华为手机打开日志输出的几种方法
  15. 轻量级分布式日志管理系统Graylog、Loki及ELK的分析和对比
  16. linux dos2unix用法,Linux命令之dos2unix
  17. 计算机音乐谱东演员,计算机音乐谱光辉岁
  18. 《暗时间》读后感(一)——确实需要学习一些心理学有关的内容
  19. ode45matlab例子,ode45(ode45用法举例)
  20. c语言isfinite_visual-c-std :: isfinite在MSVC上

热门文章

  1. Wamp升级php到7.3版本
  2. SpringAOP之代理设计模式
  3. 天平游码读数例题_初二上册物理实验——托盘天平使用的注意事项
  4. 雨滴桌面时间插件_Win10美化向——如何搭配你的桌面
  5. 为什么jdk的CLASSPATH环境变量需要设置rt.jar 和 tools.jar
  6. Java 泛型实现方法 — 擦拭法
  7. hibernate左连接查询时在easyUI的dataGrid中有些行取值为空的解决办法
  8. java oca_OCA第4部分中的Java难题
  9. prima evb_用Priam设置Cassandra
  10. 垃圾收集 java_Java的内置垃圾收集如何使您的生活更美好(大部分时间)