2013-01-04 42 views
0

在爲SpecFlow Step Definitions的文檔就說明,你可以通過使用一個逗號創建步驟定義列表的示例場景分隔列表:如何在SpecFlow方案的步驟定義中生成列表<T>?

例如:

鑑於我可以用「週二,週五,週日」

會導致:

@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和SpecFlow的1.9.1版本。有誰知道我可能做錯了什麼?或者我該如何解決這個問題?

在此先感謝。

回答

2

目前唯一支持列表的語言是Java。我假設你在使用VS2012時使用C#。如果您將鏈接頁面上的代碼示例切換爲C#而不是Java,那麼List示例將消失,而且我看到的是您的相同行爲。

但是,您可以簡單地將字符串作爲參數並將其放入List中。 1行。

C#

[Given(@"I am available on ""(.*)""")] 
public void GivenIAmAvailableOn(string days) 
{ 
     List<String> daysList = new List<string>(days.Split(',')); 
+0

謝謝。我沒有注意到網頁上的語言選擇。 –

0

如果單擊Step Definitions頁的C#,你會看到該列表的例子消失。然而,OCary指出你可以通過分割字符串來模擬它。

但我建議沒有必要投回到列表中,您可以通過LINQ的只是使用了IEnumerable代替你可以解析列表更簡單地說,即

[Given(@"I am available on ""(.*)""")] 
public void GivenIAmAvailableOn(string days) 
{ 
    var daysList = from x in days.Split(',') select x.Trim(); 
2

你可以這樣做:

鑑於我可以用這些天:

| DaysOfWeek |

|星期一|

|星期二|

|星期三|

然後,您可以使用該表並將其轉換爲列表...

@Given("I am available on these days:") 
public void I_have_cukes_in_my_belly(Table table) { 
    List<string> days = new List<string>(); 
    foreach (var tableRow in table.Rows) 
    { 
     days.Add(tableRow["DaysOfWeek"]); 
    } 
} 
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) 
{ 
} 
相關問題