如何使用cucumber-junit设置我的Cucumberfunction的路径?

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

specification |-src |-test |-java |-mypackage |-MyFeatureTest.java |-resources |-MyFeature.feature 

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

 import org.junit.runner.RunWith; import cucumber.junit.Cucumber; @RunWith(Cucumber.class) public class HomepageTest { } 

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

 @Cucumber.Options(paths={"my/super.feature:34"}) 

我试着修改它

 @Cucumber.Options(paths={"src/test/resources/"}) 

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

  junit junit 4.10 test   info.cukes cucumber-java 1.0.0.RC20 test   info.cukes cucumber-junit 1.0.0.RC20 test  

我错过了什么吗?

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

当我将它们放在同一个目录src/main/test/ ,我可以运行我的function测试,因此它对我来说不是一个阻止程序。 但我想了解整个设置。

看看我的问题:

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

 @Cucumber.Options(features="src/test/resources") 

编辑:

在新版本的代码是

 @CucumberOptions(features="src/test/resources") 

您可以使用

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

用于扫描包中的所有要素文件

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

classpath选项在Cucumber文档中并不明显(不是在JavaDoc中),我最终从CLI文档中推断出来,其中记录了其他位置选项。 请参阅文档中的“ List configuration options部分。

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

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

我的function文件所在的位置

 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 ... 

我不希望在路径中看到src/test/resources

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

确保在src/test/resources/创建所需的包目录!

一旦你使用

 import cucumber.api.CucumberOptions; 

您需要将以下内容添加到pom.xml中,否则“mvn test”将无效。 而且您只能从IDE运行测试。 请参阅: https : //github.com/cucumber/cucumber-java-skeleton/blob/master/pom.xml

  1.7 4.12 1.2.2 3.3     org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.version}  UTF-8 ${java.version} ${java.version} -Werror     

或者您可以构建您的cucumberoptions参数,例如在https://cucumber.io/docs/reference/jvm#cli-runner中描述并将其传递给cucumber.api.cli.Main.run()。 这是一个小例子:

 String arg = "classpath:MyFeature.feature --dry-run"; String[] args = arg.split(" "); cucumber.api.cli.Main.run(args, Thread.currentThread().getContextClassLoader()); 

并在JUnit Test中使用它。 因此,您不必使用其他参数为每个测试类创建单独的类。

通过将特征文件放在src / test / java下的runner和steps文件中,或者将它放在src / main / java下 ,问题就会得到解决。

别忘了说谢谢 。:)