0

SpecFlowステップ定義のドキュメントでは、シナリオでカンマ区切りのリストを使用して、ステップ定義でリストを作成できる例を示しています。

例えば:

私は「火曜日、金曜日、日曜日」に対応可能です。

次のようになります。

@Given("I am available on \"(.+)\"")
public void I_have_cukes_in_my_belly(List<String> days) {
    // Do something with the days
}

残念ながら、私がそれを行うと、次のようになります。

@Given("I am available on ""(.*)"")
public void I_have_cukes_in_my_belly(string days) {
    // Do something with the days
}

VS 2012 とバージョン 1.9.1 の SpecFlow を使用しています。誰かが私が間違っているかもしれないことを知っていますか? または、どうすればこれを修正できますか?

前もって感謝します。

4

6 に答える 6

2

現在リストをサポートしていると思われる言語はJavaだけです。VS2012を使用しているので、C#を使用していると想定しています。リンクされたページのコードサンプルをJavaではなくC#に切り替えると、リストの例がなくなり、同じ動作が見られます。

ただし、文字列をパラメータとして取得し、それをリストに入れるだけです。1行。

C#

[Given(@"I am available on ""(.*)""")]
public void GivenIAmAvailableOn(string days)
{
        List<String> daysList = new List<string>(days.Split(','));
于 2013-01-04T22:55:18.027 に答える
0

[ステップ定義] ページで [C#] をクリックすると、リストの例が非表示になります。ただし、OCary が指摘しているように、文字列を分割することでシミュレートできます。

ただし、リストにキャストバックする必要はなく、代わりにLinqを介してIEnumerableを使用できるため、リストをより簡単に解析できることをお勧めします。

[Given(@"I am available on ""(.*)""")]
public void GivenIAmAvailableOn(string days)
{
    var daysList = from x in days.Split(',') select x.Trim();
于 2013-01-06T19:58:21.887 に答える
0

現在、リストを正しく取得するためにステップ引数変換を使用しています。

[StepArgumentTransformation(@"((?:.*)(?:,.*)*)")]
public List<string> StringToList(string list)
{
    // (
    //    (?:    - Don't capture
             .*  - Match any character
    //    )
    //    (?:    - Don't capture
    //       ,   - Separated by a comma
    //       .*  - Match any character
    //    )*     - Zero or more items after the first item
    // )

    return list
        .Split(',')
        .Select(x => x.Trim())
        .ToList();
}

List<string>次に、次のように引数の型として使用できます。

[Given(@"I am available on ""(.*)""")]
public void GivenIAmAvailableOn(List<string> days)
{
}
于 2016-05-24T11:13:36.787 に答える