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

  1. 用Cucumber JVM编写BDD测试

    Cucumber JVM是编写BDD测试的出色工具.在本文中,我想对Cucumber JVM的BDD进行介绍. 让我们开始吧- 什么是BDD? 简而言之,BDD试图解决"通过示例理解需求&q ...

  2. cucumber html模板,Cucumber使用进阶

    摘要 本文从实际使用Cucumber这一工具的角度,以Cucumber-JVM实现为基础,采用了不同的事例阐述了:如何编写feature文件,如何从feature文件生成对应的Steps,如何生成不同 ...

  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. BDD - SpecFlow BDD 测试实践 SpecFlow 模板

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

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

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

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

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

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

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

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

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

最新文章

  1. 解决gcc报错:error: implicit declaration of function ‘inet_addr’ [-Werror=implicit-function-declaration]
  2. ubuntu 客户端ssh连接服务器速度缓慢
  3. 利用XML配置实体列表
  4. EasyExcel实现文件读取、导出、上传、下载操作
  5. P6378-[PA2010]Riddle【2-SAT】
  6. 数据结构之查找算法:折半查找
  7. 2021年数智化高峰论坛圆满召开
  8. wordpress PHP合并js,在WordPress函数文件中包含JS(使用PHP)的最佳实践
  9. macOS中7个隐藏的技巧
  10. 计算机如何实现截长图功能,只会Ctrl+Alt+A?告诉你电脑截长图的5大方法
  11. matlab量化股票基本面,获取数据 - MATLAB - 掘金量化
  12. 一个基于百度云和图灵的人工智能程序
  13. Hexo even主题博客配置
  14. 模拟摄像机和网络摄像机的简要对比
  15. 大厂面试预备篇——《两万字MySql基础总结》❤️建议收藏
  16. matlab复信道化滤波器组,宽带数字信道化EDA设计
  17. r矢量球坐标系旋度_唯心识学075·如何理解三维直角坐标系中的旋度表达式
  18. win8运行matlab7.0,Win8.1系统中matlab7.0不兼容的解决方法
  19. 驱动led --GPIO控制
  20. Discuz提速优化技巧

热门文章

  1. P5591-小猪佩奇学数学【单位根反演】
  2. 51nod1676-无向图同构【乱搞】
  3. P2012-拯救世界2【EGF】
  4. jzoj4282-[NOIP2015模拟10.29B组]平方数游戏【构造】
  5. YbtOJ#20064-[NOIP2020模拟赛B组Day4]预算缩减【树形dp】
  6. P3807-[模板]卢卡斯定理
  7. 【DP】【高精】幸运票 (jzoj 2122)
  8. 动态规划训练20 [Treats for the Cows POJ - 3186 ]
  9. Spark入门(一)单主standalone安装
  10. 汇编语言(十)之最小偶数