在 specflow 中传递变量数组
Passing arrays of variable in specflow
有没有办法传递参数数组而不是单独传递每个参数?
例如我有以下场景:
When i login to a site
then <firstname>, <lastname>, <middleName>, <Desingation>, <Street>, <Apartmentno> are valid
上面的列表还可以继续。相反,我可以将上述所有变量传递到一个数组中吗?
您可以传递逗号分隔的字符串,然后将其转换为列表:
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|
如果您想使用 table,那么您可以这样做:
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|
(如果需要,您可以省略 headers,只使用我认为的行值)
您还可以使用示例:
When I login to a site
then the following values are valid
| FirstName | LastName | MiddleName | Greeting | Etc | Etc |
| <name> | <lastName>| <middleName>| <greeting>| <etc> | <etc> |
这可能有帮助:
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 数据 table 中的所有 comma-separated 值转换为字符串数组。
然后在您的单个步骤绑定函数中,将输入参数的类型更改为字符串[],如下面的代码片段所示:
[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]));
}
然后,根据您对测试步骤的预期值,您可能需要应用适当的类型转换。
只需将数据作为字符串传输示例:
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++;
}
}
然后你的值作为数组中的整数
有没有办法传递参数数组而不是单独传递每个参数?
例如我有以下场景:
When i login to a site
then <firstname>, <lastname>, <middleName>, <Desingation>, <Street>, <Apartmentno> are valid
上面的列表还可以继续。相反,我可以将上述所有变量传递到一个数组中吗?
您可以传递逗号分隔的字符串,然后将其转换为列表:
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|
如果您想使用 table,那么您可以这样做:
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|
(如果需要,您可以省略 headers,只使用我认为的行值)
您还可以使用示例:
When I login to a site
then the following values are valid
| FirstName | LastName | MiddleName | Greeting | Etc | Etc |
| <name> | <lastName>| <middleName>| <greeting>| <etc> | <etc> |
这可能有帮助: 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 数据 table 中的所有 comma-separated 值转换为字符串数组。
然后在您的单个步骤绑定函数中,将输入参数的类型更改为字符串[],如下面的代码片段所示:
[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]));
}
然后,根据您对测试步骤的预期值,您可能需要应用适当的类型转换。
只需将数据作为字符串传输示例:
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++;
}
}
然后你的值作为数组中的整数