c# - 在特定条件下跳过 specflow 规范

标签 c# bdd specflow

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

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

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

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

我可以这样做:

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

我认为这可行(它不会运行该功能),但测试仍会出现在我的测试结果中,如果我用我的标签过滤掉大部分测试,这会很困惑。是否有办法让我完全停止运行该功能?

最佳答案

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

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

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

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

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

关于c# - 在特定条件下跳过 specflow 规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38608588/

相关文章:

c# - Google Drive V3 Api 获取文件名,C#

c# - 通用 C# 方法

testing - 是否有任何可与 Xamarin(最好是 xUnit.Net)一起使用的 PCL 兼容 BDD 框架

c# - Specflow 功能文件生成创建具有绝对路径的 C# 命名空间

c# - 在 NETStandard 类库中添加引用

c# - 序列化图形时出现异常

测试 CSHTML 页面

php - PHP 中 TDD 和/或 BDD 的状态如何?

specflow - 规范运行器 : Test Method getting called twice

cruisecontrol.net - 如何在 CruiseControl BuildReport 中包含 SpecFlow .html 报告?