C# 在某些条件下跳过等级流等级

C# 在某些条件下跳过等级流等级,c#,bdd,specflow,C#,Bdd,Specflow,我正在考虑为各种级别的测试设置SpecFlow,作为其中的一部分,我希望能够筛选运行哪些测试 例如,假设我想做一个完整的GUI测试运行,我在开发环境中建立GUI测试的依赖项,并运行所有标记为@GUI的规范,步骤通过GUI执行。同样,在同一个脚本中,我只想运行标记为@smoke的测试,并设置部署环境所需的任何依赖项,通过api执行这些步骤 我知道在运行specflow runner时可以过滤标记,但我还需要更改每个测试在测试运行上下文中的工作方式。此外,我希望在构建服务器上运行时,使用单个配置/命

我正在考虑为各种级别的测试设置SpecFlow,作为其中的一部分,我希望能够筛选运行哪些测试

例如,假设我想做一个完整的GUI测试运行,我在开发环境中建立GUI测试的依赖项,并运行所有标记为@GUI的规范,步骤通过GUI执行。同样,在同一个脚本中,我只想运行标记为@smoke的测试,并设置部署环境所需的任何依赖项,通过api执行这些步骤

我知道在运行specflow runner时可以过滤标记,但我还需要更改每个测试在测试运行上下文中的工作方式。此外,我希望在构建服务器上运行时,使用单个配置/命令行arg切换这种行为更改

因此,到目前为止,我的解决方案是为每种测试运行进行构建配置,并进行配置转换,以便在测试运行启动时将行为注入specflow。但我也不确定按标签过滤的正确方法

我可以这样做:

[BeforeFeature] 
public void CheckCanRun()
{
   if(TestCannotBeRunInThisContext())
   {
       ScenarioContext.Current.Pending();
   }
}

我认为这会起作用(它不会运行该功能),但测试仍然会出现在我的测试结果上,如果我用我的标记过滤掉大多数测试,这将是混乱的。如果有什么方法可以使该功能完全停止运行?

简言之,不,我认为除了上面概述的内容之外,没有其他方法可以做您想要做的事情

如果这些测试只是普通的单元测试,您将如何从运行中排除它们

在ReSharper的runner中,您可能会创建一个测试会话,其中只包含您想要运行的测试。在CI服务器上,只能在特定dll或特定类别中运行测试

Specflow是一个单元测试生成工具。它以配置中指定的方式生成单元测试。运行程序仍然必须决定要运行哪些测试,因此选择要运行的测试的原则同样适用于specflow测试


将它们放入类别中并仅运行这些类别是最简单的方法,但对其进行更细粒度的编程控制并不真正适用。你要求做的基本上就像说‘运行这个测试,但让我在测试中决定是否要运行’,这是没有意义的。

当你不想运行这些测试时,你是如何运行测试的?使用内置的VS runner?从命令行?在构建服务器?@SamHolder上,无论是在开发期间使用resharper测试运行程序还是在CI服务器上(在不同的构建级别上运行不同的配置),如果可能的话,还可以在部署的服务器上运行一些规范,以检查部署是否正常……谢谢。你刚才说的确实给了我一个实现这一目标的不同方法的想法。我可能能够制作一个生成器插件来抑制在生成阶段我不想要的测试,假设我当时能够访问正确的信息。