Cucumber,Java8:查找lambda表达式定义的步骤的用法

时间:2018-03-07 11:23:53

标签: intellij-idea lambda java-8 cucumber cucumber-jvm

目前,在我们项目的测试中,我们使用带注释的步骤定义,例如:

public class Steps {
    @Given("^Step name$")
    void methodName() { 
        // do sth
    }
}

到lambda表达式:

public class Steps implements En {
    public Steps() {
        Given("^Step name$", () -> 
            // do sth
        );
    }
}

当使用Intellij Cucumber Java插件时,很容易找到某个步骤的用法,因为它查找了带注释方法的用法(我推测)。 但是,现在我们必须手动搜索作为参数传递的正则表达式。

我的第一个问题是:使用lambda表达式有一种巧妙的方法吗?

此外:当使用Intellij的工具进行版本控制并提交包含大量步骤定义的文件时,代码分析工具将永远持续下去(我想这是因为构造函数必须编写大量代码)。

所以第二个问题是:由于步骤库不可能缩小,并且经常使用步骤使用搜索,切换回Ye Olde Way也不是一个好主意,即使用带注释的方法?

2 个答案:

答案 0 :(得分:1)

查找java-8样式步骤定义的用法还不行。可以投票并遵循此请求:IDEA-144648

答案 1 :(得分:0)

在使用时在这里工作

  • IntelliJ IDEA 2018.1.5
  • “ Cucumber for Java”插件181.5281.24

pom.xml

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <version.cucumber>3.0.2</version.cucumber>
    <!-- following versions were also checked -->
    <!--<version.cucumber>2.4.0</version.cucumber>-->
    <!--<version.cucumber>2.3.1</version.cucumber>-->
</properties>
<dependencies>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java8</artifactId>
        <version>${version.cucumber}</version>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${version.cucumber}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

userdata.feature

Feature: demo for java8 glue classes

  Scenario: user login on home page
    Given user is on home page
    When user navigate to login page
    And user enters credentials to login
    Then message displayed login successfully

胶水/StepPojo.java

package glue;

import cucumber.api.PendingException;
import cucumber.api.java8.En;

public class StepPojo implements En {
    public StepPojo() {
        Given("^User is on Home Page$", () -> {
            throw new PendingException();
        });
        When("^User Navigate to LogIn Page$", () -> {
            // Write code here that turns the phrase above into concrete actions
            throw new PendingException();
        });
        And("^User enters Credentials to LogIn$", () -> {
            // Write code here that turns the phrase above into concrete actions
            throw new PendingException();
        });
        Then("^Message displayed Login Successfully$", () -> {
            // Write code here that turns the phrase above into concrete actions
            throw new PendingException();
        });
    }
}

StepPojo.java是由Cucumber插件通过在功能文件中选择一个步骤的同时按ALT+ENTER创建的。

功能文件之前显示为

before defining the glue methods

步骤定义为

[after defining the glue methods[2]

当您在按住CTRL键的同时将鼠标悬停在一步上时,它看起来像

hover over step

在按住CTRL键的同时单击某个步骤时,将跳至相应的方法,例如

Given("^User is on Home Page$", () -> {
    throw new PendingException();
});