如何获取场景大纲示例表?

时间:2014-10-19 17:13:45

标签: cucumber bdd specflow gherkin

在AfterScenario方法中,我想从Scenario Outline中的表“Examples”中获取行,以获取其中的值,并在数据库中搜索该特定值

我知道这可以通过使用Context.Scenario.Current ...

来实现
 Context.Scenario.Current[key]=value;

...但出于某种原因,我希望能够以更简单的方式获得它

像这样:

ScenarioContext.Current.Examples();

----------- SCENARIO --------------------------------

Scenario Outline: Create a Matter

Given I create matter "< matterName >"

Examples:
| matterName   |
| TAXABLE |

----------情景之后-----------------------------------

    [AfterScenario()]
    public void After()
    {
        string table = ScenarioContext.Current.Examples();
    }

2 个答案:

答案 0 :(得分:0)

因此,如果您查看ScenarioContext的代码,就可以看到它继承自SpecflowContextValues本身就是Dictionary<string, object>。这意味着您只需使用{{3}}来获取值集合,但我不知道它们是否为Examples

答案 1 :(得分:0)

我提出的最佳解决方案是通过保留自己的静态单例对象来推断示例,然后计算同一场景运行的次数。

MyContext.Current.Counts[ScenarioContext.Current.ScenarioInfo.Title]++;

当然,如果您不同时运行所有测试或以随机顺序运行它们,则此方法不能很好地工作。拥有一个包含示例的表本身会更理想,但如果您将我的技术与使用ScenarioStepContext结合使用,则可以从呈现的步骤定义文本本身中提取Examples表的参数。

<强>功能

Scenario Outline: The system shall do something!
    Given some input <input>
    When something happens
    Then something should have happened
Examples:
| input |
| 1     |
| 2     |
| 3     |

SpecFlow Hook

[BeforeStep]
public void BeforeStep()
{
    var text = ScenarioStepContext.Current.StepInfo.Text;
    var stepType = ScenarioStepContext.Current.StepInfo.StepDefinitionType;

    if (text.StartsWith("some input ") && stepType == StepDefinitionType.Given)
    {
        var input = text.Split(' ').Last();
    }
}