2016-11-12 4 views
0

Подбор шагов можно определить по области: https://github.com/techtalk/SpecFlow/wiki/Scoped-bindings. Но это статический механизм. Есть ли способ, чтобы сделать этот механизм динамическим, так что: (?) АтрибутСогласование динамических шагов для specflow

  1. В одном случае у меня есть два или более же шаги
  2. Есть много определений шага для этого шага, украшенного
  3. I иметь шаг для изменения контекста и основы на ключе, установленном на этом этапе, будет называться другой метод

Это похоже на ограничение тегов от механизма видимости + динамичность.

Я тестирую приложение с несколькими таблицами на разных страницах. Я должен проверить, если:

  • таблица содержит строки (это подмножество)
  • таблицы имеет точные строки (элементы и порядок) (равно)
  • таблицы имеет строки (но порядок не важен).

Я пишу:

When I am on Page1 
Then I expect that table contains 
| Column1Name | Column2Name | Column3Name | 
| row1id    | true     | address   | 
| row2id    | true     | address   | 
When I do some change action on rows 
| Column1Name | 
| row1id    | 
Then I expect that table contains 
| Column1Name | Column2Name | 
| row1id    | false    | 
| row2id    | true     | 

У меня есть только один шаг определение «Я ожидаю, что таблица содержит». Он проверяет ячейки, предоставленные на этапе. Этот шаг используется на разных страницах для разных столбцов и страниц. На этой странице показаны различные бизнес-объекты, разные столбцы, но ui довольно распространен. Без этого мне пришлось бы писать шаги для каждой страницы и каждой комбинации столбцов.

Но, как всегда, есть некоторые конкретные действия, которые необходимо предпринять до того, как «Я ожидаю, что эта таблица содержит». Например:

  • другой поисковый фильтр для использования на разных страницах. на Ui (услуги, кэш и т.д.)

Я не хочу писать его в явном виде, так как это делает этот сценарий перегружен ненужными информаций появляется

  • тайм-аут, который требуется до изменения действий.

  • +0

    Это невозможно, и это звучит как его потенциально запутанный. Почему вы думаете, что хотите этого? Каков ваш прецедент? Там может быть лучшее решение, чем тот, который вы пытаетесь найти –

    +0

    Спасибо за ответ. Я согласен с вами в том, что это может сбить с толку. Я редактировал свой вопрос и добавлял образец сценария и концепцию сценария.Я хочу избежать написания многих определений одинаковых/похожих шагов в моем случае. – bwojdyla

    ответ

    0

    Как писал Сэм Холдер, это невозможно, но я достиг его с помощью инъекционного поведения классу Step. Я регистрирую поведение с SpecFlow.Autofac.SpecFlowPlugin как названные службы https://github.com/gasparnagy/SpecFlow.Autofac Вот пример кода. Реализация намного сложнее. Это всего лишь черновик.

    Существует шаг, который изменяет контекстный ключ. То же, что указано выше класса Behavior.

    public interface ITableBehavior 
        { 
         void Search(Table table); 
        } 
    
        [ContextKey("Page1")] 
        public class Page1Behavior : ITableBehavior 
        { 
         public void Search(Table table) 
         { 
          throw new System.NotImplementedException(); 
         } 
        } 
    
        [ContextKey("Page2")] 
        public class Page2Behavior : ITableBehavior 
        { 
         public void Search(Table table) 
         { 
          throw new System.NotImplementedException(); 
         } 
        } 
    
        [Binding] 
        public class Step 
        { 
         private ITableBehavior TableBehavior { get { return BehaviorResolver.Resolve<ITableBehavior>(); } } 
    
         [Then("I expcet that table contains")] 
         public void TableContains(Table table) 
         { 
           TableBehavior.Search(table); 
           //table contains implementation 
         } 
        } 
    
    Смежные вопросы