如何教 SpecFlow 向我的测试类添加额外的 NUnit 属性

Posted

技术标签:

【中文标题】如何教 SpecFlow 向我的测试类添加额外的 NUnit 属性【英文标题】:How to teach SpecFlow to add additional NUnit attributes to my test class 【发布时间】:2012-06-16 01:47:11 【问题描述】:

SpecFlow 很棒 - 它对我们进行适当的集成测试很有帮助。

我想知道的一件事是,是否有办法告诉 SpecFlow 向它在功能代码隐藏文件中创建的测试类添加额外的 NUnit 属性。

现在,我的测试类生成如下:

[System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.8.1.0")]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[NUnit.Framework.TestFixtureAttribute()]
[NUnit.Framework.DescriptionAttribute("Some action description here")]
public partial class MySampleFeature
  
   ......

SpecFlow 中有什么方法可以告诉它添加一个额外的 NUnit 属性来定义测试的类别 - 像这样:

[System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.8.1.0")]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[NUnit.Framework.TestFixtureAttribute()]
[NUnit.Framework.DescriptionAttribute("Some action description here")]
[NUnit.Framework.Category("LongRunningTests")]   <== add this "Category" attribute
public partial class MySampleFeature
  
   ......

手动将其添加到生成的代码隐藏中是浪费 - 下次 SpecFlow 重新生成该代码隐藏时,我必须记住再次执行此操作(很可能,我会忘记)。

如果 SpecFlow 中还没有该功能 - 如何申请添加此功能? :-)

【问题讨论】:

【参考方案1】:

添加到@nemesv 的好答案,添加后:

@LongRunningTests 特征:MySampleFeature

要从控制台执行,请执行以下操作:

nunit3-console.exe myTests.dll --where "cat==LongRunningTests"

【讨论】:

【参考方案2】:

事实上,如果您在功能或场景中使用tags (look for the tags section),则已经支持NUnit.Framework.Category 属性。所以如果你写

@LongRunningTests
Feature: MySampleFeature

它将生成正确的Category 属性。

但是,如果您想拥有额外的自定义属性,您需要编写一个自定义生成器提供程序来实现 IUnitTestGeneratorProvider 接口,并在配置的 specflow 部分中注册 unitTestProvider 的 generatorProvider 属性。

您可以在github 找到内置实现的源代码。

【讨论】:

这在 SpecFlow 1.9 中看起来不可能,因为 IUnitTestGeneratorProvider 接口不可访问。文档指出,在 v.2.0 发布时,Providers 将被替换为插件。例如,我想实现一个自定义 xUnitGeneratorProvider,以便将标签推送到 xUnit.NET Traits。 这在 SpecFlow 1.9 中是可能的。您需要创建一个新项目来托管您的 SpecFlow 插件。在此项目中,安装 SpecFlow NuGet 包和 SpecFlow.Plugins NuGet 包。 SpecFlow.Plugins NuGet 包包含允许您创建 SpecFlow 插件的程序集;在其中一个程序集中是IUnitTestGeneratorProviderIUnitTestGeneratorPlugin 接口(我相信每个接口的基类实现)。

以上是关于如何教 SpecFlow 向我的测试类添加额外的 NUnit 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Specflow 测试结果转换为 Cucumber Messages 格式

JSON.stringify 向我的 Json 对象添加额外的 \ 和 "" 的问题

在 VSCode 中将 SpecFlow 测试添加到 .NET Core 项目

如何使用 QSettings 向我的配置文件添加注释?

使用JSON.stringify向我的Json对象添加一个额外的和“”

如何一个接一个地运行 Specflow 测试而不是并行