在某些条件下跳过specflow规范

时间:2016-07-27 09:10:29

标签: c# bdd specflow

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

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

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

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

我可以像这样做一些事情:

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

我认为这样可以工作(它不会运行该功能)但是我的测试结果仍会出现测试结果,如果我用我的标签过滤掉大多数测试,那将会很麻烦。如果有一种方法可以做到这一点,这将使功能完全无法运行?

1 个答案:

答案 0 :(得分:1)

简而言之,除了上面提到的内容之外,我不会认为无论如何都要做你想做的事。

如果测试只是正常的单元测试,你会如何排除测试?

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

Specflow是一种单元测试生成工具。它以配置中指定的风格生成单元测试。运行者仍然必须决定运行哪些测试,因此选择上面运行的测试的相同原则适用于specflow测试。

将它们分类并仅运行这些类别是最简单的方法,但对其进行更细粒度的程序控制并不是真正适用的。您要求做的事情基本上就是说“运行此测试”,但让我在测试中决定是否要让它运行'这并没有多大意义。