Как научить SpecFlow добавлять дополнительные атрибуты NUnit в мой тестовый класс

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 такой возможности еще нет - как подать прошение о добавлении этого? :-)


person marc_s    schedule 13.06.2012    source источник


Ответы (2)


Фактически атрибут NUnit.Framework.Category уже поддерживается, если вы используете теги (ищите раздел тегов) о вашей функции или сценариях. Итак, если вы напишете

@LongRunningTests
Feature: MySampleFeature

он сгенерирует правильный атрибут Category.

Однако, если вы хотите иметь дополнительные настраиваемые атрибуты, вам необходимо написать поставщика настраиваемого генератора с реализацией интерфейса IUnitTestGeneratorProvider и зарегистрироваться с помощью атрибут generatorProvider unitTestProvider в разделе спецификации вашей конфигурации.

Вы можете найти источник встроенных реализаций на github.

person nemesv    schedule 13.06.2012
comment
Это не представляется возможным в SpecFlow 1.9, поскольку интерфейс IUnitTestGeneratorProvider недоступен. В документации указано, что провайдеры будут заменены плагинами в версии 2.0, когда она будет выпущена. Например, я хотел бы реализовать собственный xUnitGeneratorProvider, чтобы теги передавались в свойства xUnit.NET. - person Steve O; 29.08.2013
comment
Это возможно в SpecFlow 1.9. Вам необходимо создать новый проект, в котором будет размещен ваш плагин SpecFlow. В этом проекте установите пакет NuGet SpecFlow и пакет NuGet SpecFlow.Plugins. Пакет NuGet SpecFlow.Plugins содержит сборки, которые позволяют создавать подключаемые модули SpecFlow; и в одной из этих сборок есть интерфейсы IUnitTestGeneratorProvider и IUnitTestGeneratorPlugin (и я считаю, что реализация каждого из них является базовым классом). - person fourpastmidnight; 25.08.2014

Чтобы добавить к хорошему ответу @nemesv, как только вы добавили:

Функция @LongRunningTests: MySampleFeature

Чтобы выполнить из консоли, сделайте следующее:

nunit3-console.exe myTests.dll - где "cat == LongRunningTests"

person Ben Power    schedule 24.01.2018