【问题标题】:JBehave - run a single scenarioJBehave - 运行单个场景
【发布时间】:2015-10-20 20:10:36
【问题描述】:

我的情况是这样的:

我有一个包含多个场景的 JBehave 故事。每个场景都会写入一些文件,检查它们是否符合预期。然后下一个场景的@BeforeScenario 会导致框架删除输出文件。

当某些场景失败时,我想单独运行那个场景——这样我就可以在输出文件被删除之前方便地检查它(也为了速度)。其他人也问过同样的问题,并被告知“使用元过滤” - http://jbehave.org/reference/stable/meta-filtering.html - 这似乎是正确的工具。

但我不想用@skip 注释所有其他场景。我只想用@wip 注释一个场景,然后只运行那个测试。

我试过这个:

Narrative:
An example story

Scenario: A scenario I don't want to run this time
Given foo
When bar
Then baz

Meta: @wip
Scenario: A scenario that is work in progress
Given foo
When bar
Then baz

... 然后我使用 Embedder 配置如下:

embedder.useMetaFilters(Arrays.asList("+wip"));

这会导致整个故事被跳过,因为故事不匹配:

1 stories excluded by filter: +wip

但是,如果我用@wip 注释故事,那么这两个场景都会运行,因为它们都继承了wip 元属性。

有没有一种巧妙的方法来实现这一点?

【问题讨论】:

  • 我有 scenario filtering 通过匹配场景标签和过滤值来工作。例如“元:@scenario wip”和 embedder.useMetaFilters(Arrays.asList("+scenario wip"))。但在尝试自定义标记值之前,您应该切换 Scenario 和 Meta 标记的顺序以遵循 jBehave 语法
  • 很可能就是这样!
  • 是的。试了一下,你的评论成了我的答案。

标签: java jbehave


【解决方案1】:

问题只是您的Meta: 声明属于Scenario: 标头。

所以:

Scenario: A scenario that is work in progress
Meta: @wip
Given foo
When bar
Then baz

现在embedder.useMetaFilters(Arrays.asList("+wip")); 将实现你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多