如何以编程方式忽略使用TechTalk.SpecFlow和C#的一些验收测试?

我有几个功能文件与一些场景.我需要忽略一些情况,或功能,标记一些@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个选项:

> Configure将待处理的步骤视为ignoreOrPendingStepsOutcome =“忽略”来忽略,可以写:

if(IgnoreTests)
{
    ScenarioContext.Current.Pending();
}

这可能不是您想要的,具体取决于您对待处理步骤的要求.
>使用内置方法的单元测试框架在运行时忽略测试.所以如果你使用例如NUnit然后与Assert.Ignore()

if(IgnoreTests)
{
    Assert.Ignore();
}

我认为这是最干净/最简单的解决方案.
>或者如果你想做一个测试框架不可知的方式,你不怕混乱Specflow内部,那么你可以使用IUnitTestRuntimeProvider接口:

if (IgnoreTests)
{
    var unitTestRuntimeProvider = (IUnitTestRuntimeProvider) 
    ScenarioContext.Current
       .GetBindingInstance((typeof (IUnitTestRuntimeProvider))); 
    unitTestRuntimeProvider.TestIgnore("ignored");
}

即使您更改了单元测试提供程序,但这并不意味着此API不会在功能中断,因此这将会起作用.

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么