Классы определения шагов 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 учебный класс. Это позволяет мне переопределять и расширять общие функциональные возможности.

Другие вопросы по тегам