如何在黄瓜中链接特征和步骤定义

时间:2014-10-08 10:25:13

标签: java cucumber cucumber-jvm cucumber-junit

我是Cucumber java的新手并且在初始阶段遇到了这个问题: 我出于某种原因没有使用MAVEN项目。我刚刚在eclipse中创建了一个简单的java项目。

我的功能在“src / dummy / pkg / features”下,我的实现“StepDef.java”在“src / dummy / pkg / features / implementation”下

我已经为Given,When和Then编写了步骤定义,但是当我运行我的功能文件时,它无法识别实现。如何将功能与步骤定义相关联?

4 个答案:

答案 0 :(得分:5)

创建一个类YourClass,它看起来像下面的那样,并将其作为JUnit测试运行。

@RunWith(Cucumber.class)

@CucumberOptions(  monochrome = true,
                     features = "src/dummy/pkg/features/",
                       format = { "pretty","html: cucumber-html-reports",
                                  "json: cucumber-html-reports/cucumber.json" },
                         glue = "your_step_definition_location_package" )

public class YourClass {
  //Run this from Maven or as JUnit
}

答案 1 :(得分:1)

创建一个这样的跑步者类,你应该能够执行。 也没有必要手动编写步骤定义,只需创建一个特征文件并运行它,它将创建一个步骤定义的片段,可用于创建一个步骤定义类:

运行黄瓜需要一个名为Runnerclass的类文件:

with open("./file1.py") as f:
    content = f.read()

答案 2 :(得分:0)

当您运行Runner类时,它将扫描功能选项中提到的所有功能文件,然后在 glue 选项将被加载。 例如,

@RunWith(Cucumber.class)
@CucumberOptions(
        plugin = { "pretty","json:target/cucumberreports.json" }, 
        glue = "stepDefinition", 
        features = "src/test/resources/TestCases/", 
        tags={"@onlythis"},
        dryRun=false
    )
public class RunTest {

}

此处

中包含所有要素文件
  

的src /测试/资源/的TestCases /

将加载

然后所有stepdef或它的子目录都将被加载

  

stepDefinition

每当你从特征运行的步骤运行时,黄瓜将寻找与步骤的正则表达式相对应的函数,并且函数将运行。

例如。

每当步骤当用户在src / test / resources / TestCases / Login.feature中输入电子邮件ID 时,黄瓜会在所有stepdef类中找到相应的函数

Login.feature
@LoginValidation 
Feature: To smoke test functionalities of app 

@Browser @ValidLogin 
Scenario: Verify scenario in case of successful login 
    When User enters email id 
    And User enters password 
    Then User clicks on sign in button and able to sign in 

并且它将在 stepDefinition 的子目录中到达类,即在   stepDefinition.ui.home.LoginPageStepDef.java 黄瓜将找到 @When(“^用户输入电子邮件ID $”)的功能,并将执行此功能。

LoginPageStepDef.java
public class LoginPageStepDef {

    LoginPage loginPage = new LoginPage(AttachHooks.driver);
    private static Logger LOGGER = Logger.getLogger(LoginPageStepDef.class);

    @When("^User enters email id$")
    public void user_enters_email_id() throws Throwable {
        //LoginPage.obj = loginPage;
        loginPage.enterEmailId(ConfigManager.getProperty("UserName"));
    }
}

答案 3 :(得分:0)

您必须将您的项目转换为Cucumber项目。在“项目资源管理器”>“配置”>“转换为黄瓜项目”中右键单击您的项目。