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