4

我有一个使用 maven 构建的 java 项目。

我有多个包,基于不同功能的功能文件。项目测试结构如下。

src
  ->test
    ->java
      ->com
        ->usercreation
          TestStepDef.java
        ->uservalidation
          TestStepDef.java
   ->resources
        ->usercreation
           usercreation.feature
        ->uservaliation
           uservalidatin.feature

我只有一个 RunCukesTest.java 文件

@RunWith(Cucumber.class)
@CucumberOptions(format = { "html:target/cucumber-html-report",
                        "json:target/cucumber-json-report.json" }, 
                        features = "src/test/resources/",
                        glue = "??????",
                        tags = {"~@ignore"}
            )
 public class RunCukesTest {

 }

在这种情况下,它运行我所有的功能文件。但它无法找到我对该功能的特定步骤定义。所以我必须将胶水选项设置为“com.usercreation”。但是,如果我在运行用户验证功能文件时这样做,它将无法获取适当的步骤定义。在我的用例中,我不希望两个步骤 def 文件都在同一个包中,因为它们有许多具有不同功能的步骤。

有没有一种可能的方法,我可以根据功能文件正在运行的包名称动态地提供粘合选项。或者我错过了这个项目的任何其他方法。

4

3 回答 3

11
glue = { "classpath:com/usercreation", "classpath:com/uservalidation" },
于 2016-04-08T00:42:43.763 回答
1

将您RunCukesTest移到所有步骤之上的包中。Cucumber 将搜索其类路径并在同一包或子包中查找任何步骤。

按照 MikeJRamsey56 的建议设置位置是另一种选择。

于 2016-04-08T03:52:55.873 回答
0

虽然已经提供了一些不错的替代解决方案,但我还没有看到有人直接回答您的问题。

是的,可以动态更改@CucumberOptions(黄瓜注​​释),但是它需要使用Java反射,因为注释不能被参数化。

要查看动态修改的黄瓜注释示例,请参考此项目: https ://github.com/workpeter/ARGOS

特别是跑步者类。截至今天可以在这个位置找到: https ://github.com/workpeter/ARGOS/blob/master/src/test/java/integrationTests/cucumber/Runner.java

于 2018-06-27T22:58:13.430 回答