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

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

概述我有几个功能文件与一些场景.我需要忽略一些情况,或功能,标记一些@tag取决于一些条件.我已经读了 specflow documentation,但没有找到可用于我的解决方案的东西.我想用这样的东西 [BeforeScenario("sometag")]public static void BeforeScenario(){ if(IgnoreTests) { / 我有几个功能文件与一些场景.我需要忽略一些情况,或功能,标记一些@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不会在功能中断,因此这将会起作用.

总结

以上是内存溢出为你收集整理的如何以编程方式忽略使用TechTalk.SpecFlow和C#的一些验收测试?全部内容,希望文章能够帮你解决如何以编程方式忽略使用TechTalk.SpecFlow和C#的一些验收测试?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1259943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存