web-dev-qa-db-ja.com

specflowで変数の配列を渡す

各パラメーターを個別に渡す代わりに、パラメーターの配列を渡す方法はありますか?

たとえば、次のシナリオがあります。

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

リストは上に行くことができます。代わりに、上記のすべての変数を配列で渡すことはできますか?

14
AutomateFr33k

カンマ区切りの文字列を渡して、それをリストに変換できます。

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>   |
23
Sam Holder

これは役立つかもしれません: 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ステップデータテーブル内のすべてのコンマ区切り値を文字列の配列に自動的に変換します。

次に、個々のステップバインディング関数で、以下のスニペットのように、入力パラメーターのタイプをstring []として変更します。

[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]));
}

次に、テストステップの期待値に基づいて、適切な型変換を適用することをお勧めします。

2
Abhijith

データを文字列として転送するだけです例:

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++;
        }
    }

次に、値を整数として配列に入れます

0
sjef koopmans