gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:04:47 24 4
gpt4 key购买 nike

我有几个包含某些场景的功能文件。我需要忽略几个场景或功能,根据某些条件用一些 @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 个选择:

  1. Configure Specflow 使用 missingOrPendingStepsOutcome="Ignore" 将挂起的步骤视为忽略,然后您可以编写:

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

    这可能不是您想要的,具体取决于您对待处理步骤的要求。

  2. 使用您的单元测试框架内置方法在运行时忽略测试。所以如果你使用例如NUnit 然后用 Assert.Ignore() :

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

    我认为这是最干净/最简单的解决方案。

  3. 或者,如果您想以一种与测试框架无关的方式进行测试,并且您不怕弄乱 Specflow 内部结构,那么您可以使用 IUnitTestRuntimeProvider 接口(interface):

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

    即使您更改了单元测试提供程序,这也会起作用,但不能保证此 API 将来不会中断。

关于c# - 如何使用 TechTalk.SpecFlow 和 C# 以编程方式忽略某些验收测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12586040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com