[英]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.