cucumber-jvm javadocs指出glue元素的目的是指定stepdefinitions和hooks的位置。但是,这对我来说似乎不起作用。假设我在目录a中有我的功能,在目录b中有我的步骤定义。然后,
@Cucumber.Options(
features= "directory_a",
glue="directory_b"
)
将从directory_a加载我的要素文件,但是,它不会从direct_b加载我的步骤定义。但是,如果我使用
@Cucumber.Options(
features= {"directory_a", "directory_b"}
)
然后加载了来自directory_a的我的功能,并且还拾取了来自directory_b的步骤定义。这正是我想要的,但是,我不明白为什么前者不起作用?我猜测它与它有关,期望URI的格式不同(可能我需要在类路径前面添加//或类似的东西),但我在文档中找不到任何相关信息。 / p>
答案 0 :(得分:17)
我成功使用了类似的东西:
@RunWith(Cucumber.class)
@Cucumber.Options(
//this code will only look into "features/" folder for features
features={"classpath:features/"},
glue = { "com.mycompany.cucumber.stepdefinitions", "com.mycompany.cucumber.hooks" },
format = { "com.mycompany.cucumber.formatter.RuntimeInfoCatcher", "json:target/cucumber.json" },
tags = { "@working" }
)
public class CucumberStarterIT {
}
查看http://cukes.info/api/cucumber/jvm/javadoc/cucumber/api/junit/Cucumber.Options.html处的文档,它指定了String[]
类型的选项,因此,如果您没有为其提供单值列表,那么它可能不会很好地工作。试试glue={"directory_b"}
,看看会发生什么。
答案 1 :(得分:5)
我也有这个问题......到目前为止,似乎是:
“features”正在寻找文件系统路径:
features = "src/foo/bar"
而“胶水”正在寻找包名称:
glue = "foo.bar"
不确定为什么他们不同,但这似乎对我有用。
答案 2 :(得分:0)
据我所知,这完全取决于你项目的结构。例如,如果您在根级别和StepDefinition中添加“Directory_a”(包含要素文件的目录),则在src>处添加Hooks。测试> java“Directory_b”和“Directory_c”中同一级别(src> test> java)的TestRunner类
Dir_a | SRC | ---主 | ---测试 | ------的java | ------ Dir_b | ------ Dir_c
你在“Dir_c”中说“Dir_b”它将识别“Dir_b”或同一级别的任何目录,不包含任何其他路径,所以, 这将是 glue = {“Dir_b”}, 但是当您查看包含功能文件的目录时,您必须从根级别提供路径 在这种情况下它是 features = {“Dir_a”} 或给出实际路径,例如: - “E:// Project_Name // Dir_a”也应该起作用
如果您的功能目录不在根级别,请确保提供类似“src / path to feature directory”的路径
它会正常工作:)