Передача массивов переменной в specflow
Есть ли способ передать массив параметров, а не передавать каждый параметр отдельно?
Например, у меня есть следующие сценарии:
When i login to a site
then <firstname>, <lastname>, <middleName>, <Desingation>, <Street>, <Apartmentno> are valid
Список можно продолжить. Вместо этого могу ли я передать все вышеперечисленные переменные в массиве?
Ответы
Ответ 1
Вы можете передать строку, разделенную запятыми, а затем преобразовать ее в список:
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> |
Ответ 2
Это может быть полезно:
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 автоматически преобразует все значения, разделенные запятыми, в таблицу данных StepFlow 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]));
}
Затем, исходя из вашего ожидаемого значения для тестового шага, вы можете применить соответствующее преобразование типа.
Ответ 3
Просто передайте данные в виде строки. Пример:
Then LEDS 0, 1, 7 are on
[Then(@"LEDS (.*) are on(.*)]
public void ThenLEDAreOn(string p0)
{
int count = p0.Split(',').Length - 1;
string[] Leds_on = p0.Split(',');
foreach (string s in LEDs_on)
{
int.TryParse(s, out LEDS[index]);
index++;
}
}
Тогда у вас есть значения в виде целых чисел в массиве