黄瓜选项注释

时间:2013-07-05 15:07:35

标签: cucumber cucumber-jvm

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>

3 个答案:

答案 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”的路径

它会正常工作:)