如何根据特征文件位置在黄瓜 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
尤其是亚军class。截至今天可以在这个位置找到:
https://github.com/workpeter/ARGOS/blob/master/src/test/java/integrationTests/cucumber/Runner.java
我有一个使用 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
尤其是亚军class。截至今天可以在这个位置找到: https://github.com/workpeter/ARGOS/blob/master/src/test/java/integrationTests/cucumber/Runner.java