2015-06-25 3 views
10

Есть ли способ передать массив параметров, а не передавать каждый параметр отдельно?Передача массивов переменной в specflow

Например, у меня есть следующие сценарии:

When i login to a site 
then <firstname>, <lastname>, <middleName>, <Desingation>, <Street>, <Apartmentno> are valid 

Список может продолжаться выше. Вместо этого могу ли я передать все вышеперечисленные переменные в массиве?

+0

Да, см .: http://www.specflow.org/documentation/SpecFlow-Assist-Helpers/ – Blorgbeard

+0

Вы говорите о функциональности таблицы? – AutomateFr33k

+0

Полагаю, я могу попробовать. Интересно, как я пропустил эту функциональность. Но благодаря любом случае – AutomateFr33k

ответ

14

Вы можете передать разделенный запятыми строку, а затем преобразовать его в список:

When i login to a site 
then 'Joe,Bloggs,Peter,Mr,Some street,15' are valid 

[Then("'(.*)' are valid")] 
public void ValuesAreValid(List<String> values) 
{ 
} 

[StepArgumentTransformation] 
public List<String> TransformToListOfString(string commaSeparatedList) 
{ 
    return commaSeparatedList.Split(",").ToList(); 
} 

, если вы хотите, чтобы значения прийти из примеров, то вы могли бы сделать это вместо:

When I login to a site 
then '<values>' are valid 
Examples 
| values       | 
| Joe,Bloggs,Peter,Mr,Some street,15| 
| Joe,Bloggs,Peter,Mr,Some street,16,SomethingElse,Blah| 

Если вы хотите использовать таблицу, то вы можете сделать это вместо этого:

When I login to a site 
then the following values are valid 
    | FirstName | LastName | MiddleName | Greeting| Etc | Etc  | 
    | Joe  | Bloggs | Peter  | Mr  | you get| The Idea| 

(вы можете опустить заголовки, если вы хотите, и просто использовать значение строки, я думаю)

вы также можете использовать примеры с этим:

When I login to a site 
then the following values are valid 
    | FirstName | LastName | MiddleName | Greeting | Etc | Etc  | 
    | <name> | <lastName>| <middleName>| <greeting>| <etc> | <etc> | 
+1

на самом деле это еще не так ... Вы можете использовать Например: Когда я логин на сайте то следующие значения | FirstName | LastName | MiddleName | Приветствие | Etc | | | | | | | Примеры | FirstName | LastName | MiddleName | Приветствие | Etc | | Джо | Блоги | Питер | Г-н | вы получаете | – Festivejelly

+0

Ох форматирование ... – Festivejelly

+0

@Festivejellyfinally обзавелся обновлением ответа, спасибо! –

1

Это может быть полезным: https://github.com/techtalk/SpecFlow/wiki/Step-Argument-Conversions

Добавьте следующий фрагмент кода в вашем общее Шаг Определение Файл:

[StepArgumentTransformation] 
public string[] TransformToArrayOfStrings(string commaSeparatedStepArgumentValues) 
{ 
    string sourceString = commaSeparatedStepArgumentValues; 
    string[] stringSeparators = new string[] { "," }; 
    return sourceString.Split(stringSeparators, StringSplitOptions.None); 
} 

SpecFlow затем автоматически преобразует все значения, разделенные запятыми, в данные SpecFlow Steps таблицу в массив строк.

Затем в отдельной стадии связывания функции, изменить тип входного параметра в строке [], как в фрагменте ниже:

[Then(@"the expected value is '(.*)'")] 
public void ThenTheExpectedValueIs(string[] p0) 
{ 
    //ScenarioContext.Current.Pending(); 
    Assert.AreEqual(25, Convert.ToInt32(p0[0])); 
    Assert.AreEqual(36, Convert.ToInt32(p0[1])); 
    Assert.AreEqual(79, Convert.ToInt32(p0[2])); 
} 

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

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