2013-05-13 61 views
3

我想知道是否可以使用步驟參數轉換將字符串轉換爲另一個字符串。這裏有一個例子:使用步驟參數轉換在SpecFlow中格式化字符串

我有這樣的步驟:

When in element 'Element' I enter 'value'

這些步驟必須接受不同的數據,如數字,日期等。他們的定義是這樣的:

[When(@"in element '(.*)' I enter '(.*)'")] 
    public void WhenIEnterInElement(string element, string value) 
    { 
     Enter(value, element); 
    } 

我想它接受的事情,如:

When in element "Element" I enter "today plus 3 days"

,並使用步驟參數轉換,如:

[StepArgumentTransformation(@"today plus (\d+) days")] 
    public string ConvertDate(int days) 
    { 
     return DateTime.Today.AddDays(days).ToString(); 
    } 

這是不工作,因爲我試圖將字符串轉換爲srting我是嗎?沒有辦法通過步驟參數轉換來完成此操作嗎?

+0

你真的想在輸入框中輸入「今天加n天」嗎?我會認爲結果應該是一個DateTime(參數「值」應該是一個DateTime)。或者我誤解了你想要做的事情? – 2013-05-13 22:13:10

回答

3

這聽起來像你真的想要重新格式化一個字符串,以便您可以限制自己到一個單一的綁定方法。

但是

下列轉換可以通過SpecFlow進行(在以下的優先級):
  • 沒有轉換,如果參數是參數類型的實例(例如,參數類型是對象或字符串)
  • 步驟參數變換
  • 標準轉換
  • (來自https://github.com/techtalk/SpecFlow/wiki/Step-Argument-Conversions

    由於您的方法需要字符串參數,因此將使用沒有stepargumenttransformations

    您有2個選項

    1)使用轉換爲每個數據類型和方法對每種類型

    [When(@"in element '(.*)' I enter '(.*)'")] 
    public void WhenIEnterInElement(string element, DateTime value) 
    { 
        Enter(value, element.ToString()); 
    } 
    
    [StepArgumentTransformation(@"today plus (\d+) days")] 
    public DateTime ConvertDate(int days) 
    { 
        return DateTime.Today.AddDays(days); 
    } 
    

    2)總結string爲作爲目的能夠與重用你一步綁定綁定不同的未分析數據

    public class WrappedString 
    { 
        public string Value; 
        public WrappedString(string value):Value(value) {} 
    } 
    
    [When(@"in element '(.*)' I enter '(.*)'")] 
    public void WhenIEnterInElement(string element, WrappedString value) 
    { 
        Enter(value, element.Value); 
    } 
    
    [StepArgumentTransformation(@"today plus (\d+) days")] 
    public WrappedString ConvertDate(int days) 
    { 
        return new WrappedString(DateTime.Today.AddDays(days).ToString()); 
    } 
    

    1)也許更乾淨,但它聽起來像你的情況是基於一點能夠操縱te文本 - 在這種情況下(2)甚至可以幫助模擬該需求。

    +0

    請注意,在測試中使用「datetime.today」可能會導致明顯的失敗 - 例如在月底(特別是二月)。今天失敗/通過的測試將在明天失敗。 – perfectionist 2014-02-18 10:56:11

    相關問題