在特定条件下跳过 specflow 规范

skip specflow specs under certain conditions

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

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

我知道您可以在 运行 通过 specflow 运行ner 时过滤标签,但我还需要更改每个测试在测试上下文中的工作方式 运行。此外,我希望在构建服务器上 运行 时使用单个 config/command 行 arg 来切换这种行为变化。

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

我可以这样做:

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

我认为这可行(它不会 运行 该功能)但测试仍然会出现在我的测试结果中,如果我用我的测试过滤掉大部分测试,那将是混乱的标签。如果有什么方法可以完全从 运行ning 中删除该功能?

简而言之,不,我不认为除了上面概述的内容之外,无论如何都可以做您想做的事。

如果这些测试只是普通的单元测试,您如何将它们排除在 运行 之外?

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

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

将它们放入类别中并 运行仅使用这些类别是最简单的方法,但对其进行更细粒度的编程控制并不真正适用。你要求做的基本上就像说 'run this test, but let me decide in the test if I want it to run' 这没有什么意义。