Классы определения шага Specflow в разных проектах
Возможно ли иметь два класса определения шага, которые сначала входят в одно пространство имен/проект, а второе - в другое?
Мне это нравится:
Мой тестовый проект, который я запускаю:
пространство имен: ABZ.ExcelTest
имя класса: ABZ.ExcelTest.ExcelStepDefinition
Мой другой проект, который является логикой для тестирования:
пространство имен: ABZ.OfficeAddInTestLogic
имя класса: ABZ.OfficeAddInTestLogic.StepDefinition
У меня есть атрибут [Binding] на обоих моих классах, но этот, который не находится в тестовом проекте
(ABZ.OfficeAddInTestLogic.StepDefinition) не может быть найден, я получаю ошибку NUnit:
Не найдено подходящего определения шага для шага. Используйте следующий код для его создания:
...
Возможно ли иметь 2-хэтапные классы определения в разных проектах?
Ответы
Ответ 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
. Это позволяет мне переопределить и расширить общую функциональность.