【问题标题】:Cucumber step definitions are not being located when running from the command line从命令行运行时未找到黄瓜步骤定义
【发布时间】:2018-08-01 21:29:23
【问题描述】:

一直在关注 Java 的黄瓜书,我正在处理的这个示例与第 2 章中的非常相似。这是在 cmd 行上,因为此时我不想将其合并到 IDE 中。

Feature: practice test
  Scenario Outline: not CheckingOut bananas
    given abc
    when place holder2
    then place holder3

测试步骤:

public class SimpleTest {
    @Given("^abc")
    public void part1() throws Exception {
        System.out.println("part 1");
        throw new Exception("an exceptoin");
    }

    @When("place holder2")
    public void part2(){
        System.out.println("part 2");
    }

    @Then("place holder3")
    public void part3() {
        System.out.println("part 3");
    }

}

我在@Given 上试过“abc”、“^abc”、“give abc”...

我正在使用以下 bat 文件来驱动它,并且步骤定义会编译并且类文件在那里。我在 -g (胶水)选项上意识到包名是参数值,所以我让它尽可能简单 但我找到了 0 个场景。 bat文件很简单:

echo cucumber compile and execution
javac -cp "lib/*" step_definitions/SimpleTest.java 
javac -cp "lib/*;web/WEB-INF/lib/*" test/java/xxxxx/zzzz/referral/out/batch/RunCukesTest.java 
java -cp "lib/*;web/WEB-INF/lib/*;.;test/java/*" cucumber.api.cli.Main -p pretty -g step_definitions features

我始终得到以下结果:

Feature: practice test

  Scenario Outline: not CheckingOut bananas ←[90m# bogus.feature:2←[0m
    given abc
    when place holder2
    then place holder3


0 Scenarios
0 Steps
0m0.000s

显然 CLI 正在查找功能文件,但未找到已编译的步骤定义。怀疑这是一个类路径问题。我提供了额外的目录并移动了步骤定义文件。 CLI 没有获取功能文件并将其与编译的定义匹配。提前谢谢。很多时候输入这些问题,解决方案就实现了,但事实并非如此。

如果 *.feature 文件是 cucumber 运行的必要条件,并且它们必须对应于已编译的步骤定义,即使 junit 挂钩到 cucumber.class 测试运行器,这本书也可以留下更少的不确定性。 这本书的论坛看起来很薄。可能需要去github或者源代码所在的地方。

【问题讨论】:

    标签: java cucumber cucumber-java


    【解决方案1】:

    首先,保持关键字的第一个字母为大写ex。给定,等等。

    其次,场景大纲下定义的步骤仅在“示例”中存在少量记录时才执行。此外,这些步骤将针对“n”条记录执行“n”次。

    可以认为是Feature文件提供的一个隐式循环。

    【讨论】:

      【解决方案2】:

      尝试将 Given、When、Then 和 & But 的首字母大写

      Cucumber 允许在每个场景和功能之前添加文字,以便更多地描述每个场景和功能将要发生的事情。 Given, When, Then, And & But 使用大写字母是他们遵守的标准,知道那里有一个步骤。

      所以对于你的例子:

      Feature: practice test
      
      Scenario: not CheckingOut bananas ←[90m# bogus.feature:2←[0m
       Given abc
       When place holder2
       Then place holder3
      

      编辑

      除非您要在下面提供示例,否则不要使用场景大纲语法,如下所示:

      Feature: practice test
      
      Scenario Outline: not CheckingOut bananas ←[90m# bogus.feature:2←[0m
       Given abc
       When place holder<placeholder>
       Then place holder<placeholder2>
      
       Examples:
      |placeholder|placeholder2|
      | 1         | 2          |
      | 2         | 3          |
      | 3         | 4          |
      

      【讨论】:

      • 凯尔,感谢您的帮助。帽子肯定是个问题,所以谢谢。另外,我在那里有“大纲”。我不知道它到底是做什么的,但在删除它之后,CLI 的行为有很大不同。 “大纲”对我做了什么?想知道为什么我被否决了。
      • 它会尝试在场景底部找到示例表,但没有找到它,并且会抛出它期望在那里的东西。场景大纲需要场景中的占位符(用 括号标记)和一个以占位符作为标题的示例表。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多