在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();
}
答案 0 :(得分:0)
因此,如果您查看ScenarioContext的代码,就可以看到它继承自SpecflowContext,Values本身就是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();
}
}