繁体   English   中英

如何根据特征文件位置在黄瓜java中创建动态胶水?

[英]How to create dynamic glue in cucumber java based on the feature file location?

我有一个使用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”。 但是,如果我在运行uservalidation功能文件时这样做,它将无法获取适当的步骤定义。 在我的用例中,我不希望步骤def文件位于同一个包中,因为它们具有许多具有不同功能的步骤。

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

glue = { "classpath:com/usercreation", "classpath:com/uservalidation" },

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

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

虽然提供了一些很好的替代解决方案,但我没有看到有人直接回答你的问题。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM