Классы определения шагов Specflow в разных проектах
Можно ли иметь два класса определения шагов, первый из которых находится в одном пространстве имен / проекте, а второй - в другом? У меня вот так:
Мой тестовый проект, который я запускаю: namespace: ABZ.ExcelTest Имя класса: ABZ.ExcelTest.ExcelStepDefinition
Мой другой проект, который является Logic для тестирования: namespace: ABZ.OfficeAddInTestLogic Имя класса: ABZ.OfficeAddInTestLogic.StepDefinition
У меня есть атрибут [Binding] в обоих моих классах, но этот, которого нет в тестовом проекте (ABZ.OfficeAddInTestLogic.StepDefinition), не может быть найден, я получаю ошибку NUnit:
Не найдено подходящего определения шага для шага. Используйте следующий код для его создания:...
Возможно ли иметь 2 ступени определения классов в разных проектах?
2 ответа
Да, это так - эта функция называется внешними шагами (см. https://github.com/techtalk/SpecFlow/blob/master/Tests/FeatureTests/ExternalSteps/ExternalSteps.feature).
Вероятно, вам не хватает настройки app.config, подобной этой:
<specFlow>
<stepAssemblies>
<stepAssembly assembly="ExternalStepsCS" />
</stepAssemblies>
Это будет искать шаги во внешней сборке под названием ExternalStepsCS в этом случае.
У меня часто будет библиотека "Помощников по тестированию", в которой общий код будет использоваться несколькими тестовыми проектами. У меня будет класс в этой общей библиотеке, давайте назовем его CucumberBase
, Затем в моем реальном тестовом проекте у меня будет такой класс:
[Binding]
public class SomeFeatureSpecs : CucumberBase
{
...
}
Каждая публика CucumberBase
метод, помеченный как [Given()]
/[When()]
/[Then()]
/так далее. правильно выбран в моем реальном тестовом проекте, в SomeFeatureSpecs
учебный класс. Это позволяет мне переопределять и расширять общие функциональные возможности.