如何使用cucumber-junit设置我的Cucumber功能的路径?

cri*_*nge 19 java cucumber cucumber-jvm cucumber-junit

我尝试使用Java和Maven构建我的第一个可执行规范.我用这个结构创建了一个简单的项目:

specification
|-src
  |-test
    |-java
      |-mypackage
        |-MyFeatureTest.java
    |-resources
      |-MyFeature.feature
Run Code Online (Sandbox Code Playgroud)

在junit测试中MyFeatureTest.java我有这个:

import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;

@RunWith(Cucumber.class)
public class HomepageTest {
}
Run Code Online (Sandbox Code Playgroud)

现在https://github.com/cucumber/cucumber-jvm/wiki/IDE-support说我应该添加以下行:

@Cucumber.Options(paths={"my/super.feature:34"})
Run Code Online (Sandbox Code Playgroud)

我试着修改它

@Cucumber.Options(paths={"src/test/resources/"})
Run Code Online (Sandbox Code Playgroud)

但注释@Cucumber.Options根本不可用.我pom.xml有这种依赖:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.10</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>info.cukes</groupId>
  <artifactId>cucumber-java</artifactId>
  <version>1.0.0.RC20</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>info.cukes</groupId>
  <artifactId>cucumber-junit</artifactId>
  <version>1.0.0.RC20</version>
  <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

更新我遗漏了一些东西:黄瓜特征文件必须在子目录中src/test/resources/mypackage/.否则,junit测试不会接收它.

当我将它们放在同一目录中时src/main/test/,我可以运行我的功能测试,所以它对我来说不是一个阻止器.但我想了解整个设置.

lan*_*oxx 17

看看我的问题在这里:

您可以通过在选项注释中设置要素属性来指定类路径上的位置

@Cucumber.Options(features="src/test/resources")
Run Code Online (Sandbox Code Playgroud)

编辑:

在新版本的代码是

@CucumberOptions(features="src/test/resources")
Run Code Online (Sandbox Code Playgroud)


mar*_*ers 14

我参加派对已经很晚了(4年!)但是认为这是值得回答的,因为没有人提到classpath评估,上面的解决方案在Maven多模块情况下不起作用.

List configuration options选项在Cucumber文档中并不明显(也不在JavaDoc中),我最终从CLI文档中推断出它,其中记录了其他位置选项.请参阅src/test/resources文档中的 部分.

这就是让我在Maven多模块项目中运行(从IDE和命令行运行)的原因.

@CucumberOptions(
        features = {"classpath:product"},
        //...
)
public class RunCukesTest extends AbstractTestNGSpringContextTests {
Run Code Online (Sandbox Code Playgroud)

我的功能文件所在的位置

main-project
    sub-module-1
        src/test/java/com/foo/
            RunCukesTest.java
        src/test/resources/product/
            feature_1.feature
            feature_2.feature
    sub-module-2
        ...
Run Code Online (Sandbox Code Playgroud)

我不高兴看到/这条路.

  • 这是正确的解决方案,指定'src/test/resources'的所有其他答案在某种意义上都是错误的,它们很脆弱,只能在IDE中正确运行.使用'classpath:features'可确保在部署到CI构建环境时能够正常工作. (5认同)

小智 7

您可以使用

@CucumberOptions(
    format = "pretty",
    tags = {"~@Ignore"},
    features = "src/test/resources/com/"  //refer to Feature file
)
Run Code Online (Sandbox Code Playgroud)

用于扫描包中的所有功能文件


cri*_*nge 5

好吧,我只能把它放在星期一早上......我使用的目录布局不正确,我忘了将黄瓜功能放入与我的包结构匹配的子目录中.

确保您还创建了所需的包目录src/test/resources/!