我有几个功能文件和一些场景。我需要忽略几个场景或功能,标有一些@tag
,具体取决于某些条件。我读过specflow documentation,但没有找到对我的解决方案有用的东西。我想用类似的东西
[BeforeScenario("sometag")]
public static void BeforeScenario()
{
if(IgnoreTests)
{
// This is the hot spot
Scenario.DoSomethingToIgnoreScenarioIfConditionButRunScenarioIfConditionFalse();
}
}
我还尝试动态添加或删除标签
[BeforeScenario("sometag")]
public static void BeforeScenario()
{
if(IgnoreTests)
{
ScenarioContext.Current.ScenarioInfo.Tags.ToList().Add("ignore");
}
}
但它不起作用。也许是否有其他方法可以动态添加或删除标签?或者ScenarioContext
类中的一些方法会忽略当前的情况?
您至少有3个选项:
missingOrPendingStepsOutcome="Ignore"
Specflow然后你可以写:
if(IgnoreTests)
{
ScenarioContext.Current.Pending();
}
根据您对待处理步骤的要求,可能不是您想要的。if(IgnoreTests)
{
Assert.Ignore();
}
我认为这是最干净/最简单的解决方案。IUnitTestRuntimeProvider
接口:
if (IgnoreTests)
{
var unitTestRuntimeProvider = (IUnitTestRuntimeProvider)
ScenarioContext.Current
.GetBindingInstance((typeof (IUnitTestRuntimeProvider)));
unitTestRuntimeProvider.TestIgnore("ignored");
}
即使您更改了单元testprovider,这也会有效,但不保证此API不会在将来中断。