【问题标题】:skip specflow specs under certain conditions在某些条件下跳过 specflow 规范
【发布时间】:2016-07-27 18:03:34
【问题描述】:

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

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

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

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

我可以这样做:

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

我认为这会起作用(它不会运行该功能),但测试仍然会出现在我的测试结果中,如果我用我的标签过滤掉大部分测试,这会很混乱。如果有一种方法可以使该功能完全停止运行?

【问题讨论】:

  • 当您不想运行这些测试时,您是如何运行这些测试的?使用内置的 VS 跑步者?从命令行?在构建服务器上?
  • @SamHolder 在开发过程中使用 resharper 测试运行器和 CI 服务器(在不同的构建级别上运行不同的配置),如果可能的话,还可以在已部署的服务器上使用一些规范来检查部署一切顺利...

标签: c# bdd specflow


【解决方案1】:

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

如果这些测试只是普通的单元测试,你会如何排除它们的运行?

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

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

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

【讨论】:

  • 谢谢。你所说的实际上确实让我对实现这一目标的不同方法有了一个想法。假设我当时可以访问正确的信息,我也许可以制作一个生成器插件来抑制我在生成阶段不需要的测试。
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 2016-05-27
相关资源
最近更新 更多