Dmy*_*tro 13 c# acceptance-testing specflow
我有几个功能文件和一些场景.我需要忽略几个场景或功能,@tag根据某些条件标记一些.我已阅读specflow文档,但没有找到对我的解决方案有用的东西.我想用类似的东西
[BeforeScenario("sometag")]
public static void BeforeScenario()
{
if(IgnoreTests)
{
// This is the hot spot
Scenario.DoSomethingToIgnoreScenarioIfConditionButRunScenarioIfConditionFalse();
}
}
Run Code Online (Sandbox Code Playgroud)
我还尝试动态添加或删除标签
[BeforeScenario("sometag")]
public static void BeforeScenario()
{
if(IgnoreTests)
{
ScenarioContext.Current.ScenarioInfo.Tags.ToList().Add("ignore");
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.也许是否有其他方法可以动态添加或删除标签?或者ScenarioContext类中哪些方法会忽略当前场景?
nem*_*esv 24
您至少有3个选项:
配置 Specflow将待处理步骤视为忽略,missingOrPendingStepsOutcome="Ignore"然后您可以编写:
if(IgnoreTests)
{
ScenarioContext.Current.Pending();
}
Run Code Online (Sandbox Code Playgroud)
根据您对待处理步骤的要求,可能不是您想要的.
使用内置方法的单元测试框架在运行时忽略测试.因此,如果您使用的是例如NUnit,那么使用Assert.Ignore():
if(IgnoreTests)
{
Assert.Ignore();
}
Run Code Online (Sandbox Code Playgroud)
我认为这是最干净/最简单的解决方案.
或者如果你想要一个与测试框架无关的方式,你不怕乱丢Specflow内部,那么你可以使用IUnitTestRuntimeProvider界面:
if (IgnoreTests)
{
var unitTestRuntimeProvider = (IUnitTestRuntimeProvider)
ScenarioContext.Current
.GetBindingInstance((typeof (IUnitTestRuntimeProvider)));
unitTestRuntimeProvider.TestIgnore("ignored");
}
Run Code Online (Sandbox Code Playgroud)
即使您更改了单元testprovider,这也会有效,但不保证此API不会在将来中断.
| 归档时间: |
|
| 查看次数: |
8064 次 |
| 最近记录: |