我的测试项目中有以下钩子:
[AfterScenario]
[Scope(Tag = "Tag1"), Scope(Tag = "Tag2")]
public static void AfterScenarioMethod()
{
}
基于SpecFlow文档,我应该只在ScenarioContext.Current.ScenarioInfo.Tags包含两个必需标记时才输入AfterFeatureMethod()。但是,即使只有Tag1可用,也会执行该方法。
我在这里错过了什么吗?
首先AfterScenario不是静态的。
如果在一个属性上定义多个属性,则将它们与AND组合。如果您有多个属性,则将它们与OR结合使用。
来自文档:https://specflow.org/documentation/Scoped-Bindings/
如果为同一方法或类定义了多个[Scope]属性,则属性与OR组合,即至少有一个[Scope]属性需要匹配。
要检查多个标签,您必须执行以下操作:
[Binding]
public class Bindings
{
private ScenarioContext _scenarioContext;
public Bindings(ScenarioContext scenarioContext)
{
_scenarioContext = scenarioContext;
}
[AfterScenario]
public static void AfterScenarioMethod()
{
if (_scenarioContext.ScenarioInfo.Tags.Contains("Tag1") &&
_scenarioContext.ScenarioInfo.Tags.Contains("Tag2") {
//do you stuff
}
}
}
代码是从内存写的,我没试过。