Подтвердить что ты не робот

Классы определения шага Specflow в разных проектах

Возможно ли иметь два класса определения шага, которые сначала входят в одно пространство имен/проект, а второе - в другое? Мне это нравится:

Мой тестовый проект, который я запускаю: пространство имен: ABZ.ExcelTest имя класса: ABZ.ExcelTest.ExcelStepDefinition

Мой другой проект, который является логикой для тестирования: пространство имен: ABZ.OfficeAddInTestLogic имя класса: ABZ.OfficeAddInTestLogic.StepDefinition

У меня есть атрибут [Binding] на обоих моих классах, но этот, который не находится в тестовом проекте (ABZ.OfficeAddInTestLogic.StepDefinition) не может быть найден, я получаю ошибку NUnit:

Не найдено подходящего определения шага для шага. Используйте следующий код для его создания: ...

Возможно ли иметь 2-хэтапные классы определения в разных проектах?

4b9b3361

Ответ 1

Да, это - эта функция называется внешними шагами (см. https://github.com/techtalk/SpecFlow/blob/master/Tests/FeatureTests/ExternalSteps/ExternalSteps.feature)

То, что вам, вероятно, не хватает, это параметр app.config, подобный этому:

<specFlow>  
<stepAssemblies>
  <stepAssembly assembly="ExternalStepsCS" />
</stepAssemblies>

В этом случае будут искать шаги во внешней сборке под названием ExternalStepsCS.

Ответ 2

У меня часто будет библиотека "Test Helpers", с общим кодом, разделяемым между несколькими тестовыми проектами. У меня будет класс в этой общей библиотеке, позвоните ему CucumberBase. Затем в моем фактическом тестовом проекте у меня будет такой класс:

[Binding]
public class SomeFeatureSpecs : CucumberBase
{
    ...
}

Каждый общедоступный метод CucumberBase, помеченный [Given()]/[When()]/[Then()]/и т.д. получает правильный ответ в моем фактическом тестовом проекте в классе SomeFeatureSpecs. Это позволяет мне переопределить и расширить общую функциональность.