【问题标题】:Cucumber options annotation黄瓜选项注释
【发布时间】:2013-07-03 17:45:52
【问题描述】:

cucumber-jvm javadocs 声明胶水元素的目的是指定步骤定义和钩子的位置。但是,这似乎对我不起作用。假设我在目录 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:// 或类似的东西前面加上)有关,但我在文档中找不到任何关于此的信息。

【问题讨论】:

  • @Cucumber.Options 现在已弃用,请使用 CucumberOptions
  • 我会将此问题标记为已过时。

标签: cucumber cucumber-jvm


【解决方案1】:

您好,据我所知,这完全取决于您项目的结构。例如,如果您在根级别和 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”或同一级别的任何目录而没有任何额外的路径,所以, 这将是 胶水= {“Dir_b”}, 但是当您查看包含功能文件的目录时,您必须从根级别给出路径 在这种情况下 特征= {“Dir_a”} 或给出实际路径,例如:-“E://Project_Name//Dir_a”也应该工作

如果您的功能目录不在根级别,请确保您提供类似“src/path to feature directory”的路径

它会正常工作:)

【讨论】:

    【解决方案2】:

    我也遇到过这个问题......到目前为止,似乎是这样的:

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

    features = "src/foo/bar"
    

    而“glue”正在寻找包名

    glue = "foo.bar"
    

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

    【讨论】:

    • 为什么它们不同的答案是特性是从一个目录加载的,例如资源目录。 Glue 以递归方式从上述包 AND 所有子包中加载实际编译的类,而不管它们在文件系统上的什么位置。
    【解决方案3】:

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

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

    【讨论】:

    • 从上面的例子或文档中看不清楚,但是glue只取包名。
    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多