2016-08-11 2 views
1

У меня есть сценарий SpecFlow, и я хочу указать диапазон возможных значений в качестве ввода.Как реализовать парсер для атрибутов ввода SpecFlow

Scenario: Search completed successfully 
Given I am on the application screen 
    And I enter an number of AA191DD 
When I press the search button and wait till search will be completed 
Then I should see *AtLeastOne* number of cars available for given number 

На самом деле, я пытался реализовать какой-то Times структуры. Требование, чтобы иметь возможность ввести некоторые диапазоны, например:

  • AtLeastOnce
  • Отсутствует
  • Точный ({число})

Текущая реализация: У меня есть номер перечисление:

public enum Number 
{ 
    AtLeastOnce, 
    None 
} 

И метод привязки Specflow принимает в качестве ввода этого перечисления.

public void ThenIShouldSeeNumberOfCarsAvailable(Number numberEnum) 
{ 
} 

Но теперь я не знаю, как реализовать Numbers.Exact (45). Любые предложения?

ответ

1

Я чувствую, что вы слишком усложняете что-то, но я постараюсь дать вам рабочее решение, как я бы это сделал.

Сначала я не думаю, что вы можете сделать это с перечислением, так как вам нужно сохранить дополнительный бит информации (точное число для сравнения), поэтому я, вероятно, поеду с интерфейсом и реализациями. Я бы назвал его INumericComparison или аналогичным. Тогда у меня будет реализация «по крайней мере», «нет» и «точно». Я бы использовал enum like class со статическими заводскими методами для создания трех разных типов. Тогда у меня будет StepArgumentTransformation в шагах, чтобы преобразовать текст в один из этих типов. Я нахожусь в своем телефоне, поэтому код будет с манжетой, но что-то в этом роде.

Public class NumericComparison 
{ 
    Public static INumericComparison None() 
    { 
     Return new ExactComparison(0); 
    } 
    Public static INumericComparison AtLeastOne() 
    { 
     Return new AtLeastComparison(1); 
    } 
    Public static INumericComparison Exactly(into value) 
    { 
     Return new ExactComparison(value); 
    } 
} 

Public interface INumericComparison 
{ 
    Public book PassesComparison(int valueToCompare); 
} 

Я оставлю фактические реализации в качестве упражнения для ученика.

Преобразование аргумента шага может принимать регулярное выражение в specflow, чтобы вы могли придумать некоторые из них, которые соответствуют каждому из ваших битов текста и просто возвращают один из статических методов.

Смежные вопросы