18

cucumber-jvm javadocs声明glue 元素的目的是指定stepdefinitions 和hook 的位置。但是,这似乎对我不起作用。假设我在目录 a 中有我的功能,在目录 b 中有我的步骤定义。然后,

@Cucumber.Options(
        features= "directory_a", 
            glue="directory_b"
)

将从directory_a 加载我的功能文件,但是它不会从directly_b 加载我的步骤定义。但是,如果我使用

@Cucumber.Options(
        features= {"directory_a", "directory_b"}
)

然后我的 directory_a 功能被加载,并且我的 directory_b 步骤定义也被拾取。这正是我想要的,但是,我不明白为什么前者不起作用?我猜这与期望 URI 的格式不同(也许我需要在 classpath:// 或类似的东西前面加上)有关,但我在文档中找不到任何相关信息。

4

3 回答 3

19

我已经成功使用了类似的东西:

@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"}看看你会发生什么。

于 2013-09-11T19:23:41.537 回答
9

我也有这个问题......到目前为止,它似乎是:

“功能”正在寻找文件系统路径

features = "src/foo/bar"

而“glue”正在寻找一个包名

glue = "foo.bar"

不知道为什么它们不同,但这似乎对我有用。

于 2016-03-25T19:33:07.053 回答
0

嗨,据我所知,这一切都取决于您项目的结构。例如,如果您在根级别和 StepDefinition 中添加“Directory_a”(包含功能文件的目录),则 Hooks at src > test > java "Directory_b" 和同一级别的 TestRunner 类( src > test > java )在“目录_c"

Dir_a
|
src
   |---main
   |---test
          |------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”的路径

它会正常工作:)

于 2018-04-03T14:50:32.610 回答