2012-06-13 10 views
5

SpecFlow - это замечательно - и это очень помогает нам провести правильное тестирование интеграции.Как научить SpecFlow добавлять дополнительные атрибуты NUnit к моему тестовому классу

Одна вещь, о которой мне было интересно, заключается в том, есть ли способ сообщить 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 - как подать заявку на добавление этого? :-)

ответ

7

Фактически атрибут NUnit.Framework.Category уже поддерживается, если вы используете tags (look for the tags section) в своей функции или сценариях. Так что, если вы пишете

@LongRunningTests 
Feature: MySampleFeature 

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

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

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

+1

Отлично - спасибо! Работает как шарм! –

+2

Это не похоже на возможность в SpecFlow 1.9, потому что интерфейс IUnitTestGeneratorProvider недоступен. В документации указано, что поставщики будут заменены плагинами в версии 2.0 при ее выпуске. Например, я хотел бы реализовать пользовательский xUnitGeneratorProvider, чтобы теги были вытеснены в xUnit.NET Traits. –

+1

Это возможно в SpecFlow 1.9. Вам нужно создать новый проект, в котором будет размещен ваш плагин SpecFlow. В этом проекте установите пакет SpecFlow NuGet и пакет SpecFlow.Plugins NuGet. Пакет SpecFlow.Plugins NuGet содержит сборки, которые позволяют создавать плагины SpecFlow; и в одной из этих сборок есть интерфейсы «IUnitTestGeneratorProvider» и «IUnitTestGeneratorPlugin» (и я считаю, что каждый из них имеет базовый класс). – fourpastmidnight

0

Чтобы добавить @ nemesv Хороший ответ после того, как вы добавили:

@LongRunningTests Характеристика: MySampleFeature

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

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