2012-04-23 12 views
6

ステップの多くが0,1または2の日付を「最初のパラメータ」として使用する必要があるという事実を、どうすれば最もうまく処理できますか?日付がいる限りの手順は多くの場合、互いにSpecflowを使用したオプションのパラメータ

Given Peter was born 23-06-1973 
And Peter created an account 
And Peter deposited $200 

しかし、ステップの多くの後に起こるようがない懸念されるとき、最も簡単なケースがどのように私は最高のSpecflow

にオプションの引数をサポートして作るのですか例えば、他の回では

Given Peter was born 23-06-1973 
And at 1-4-2012 Peter created an account 
And at 13-4-2012 Peter deposited $200 

として時間依存、などであるように、リアルタイムの日付と何かが起こった日付などの2つの日付があります。例えば。ペーターは、送金のために印刷された書式14-4-2012を記入しましたが、フォームは数日間失われました。そして、フォームが数日前に記入されたことを今日記録する必要があります。

Given Peter was born 23-06-1973 
... 
And at 16-4-2012 really at 14-4-2012 Completed a transfer form to transfer $100 to account 12345 

答えて

3

私は複数のステップのシンプルさを好みますが、あなたが提案したいことを行うには、適切な正規表現を作る必要があります。 (テストされていない)のようなもの:

[Given(@"(at ([0-9-]+) (really at ([0-9-]+) |)|)(\w+) Completed a transfer form to transfer \$(\d+) to account (\d+)"] 
public void TransferStep(string dummy1, DateTime? atDate, string dummy2, DateTime? reallyAtDate, string name, decimal amount, int account) 
4

2つのことは、私の頭の中にポップ:

まず私は今日は限りが短い(oneliners)されているように、ステップの定義の負荷を持つの多くに心配してのいくつかの並べ替えに呼び出していません私がテスト中のシステムを自動化するのに役立つ自動化レイヤーまたはDSL。インスピレーションについては、excellent presentationを参照してください。

そういう意味では、それぞれのケースで「過負荷」でステップ定義を倍増させることができます。

第2の解決策で私の最初の刺し傷は、同じ方法のために互いの上に属性を積み重ねることでした。それは動作しますが、オプションのパラメータは動作しません。 (オプションのパラメータは、DateTimeのような参照型ではうまく機能しませんが、DateTime?nullable works)。 このような手順を実行すると、次のようなエラーが表示されます。

パラメータの数が一致しません!私は起こさなかった願ってい

[Given(@"case one with one int '(\d+)'")] 
    public void Case1(int a) 
    { 
     // Short but sweet step definition that calls into automation layer 
    } 

    [Given(@"case one with two ints '(\d+)' and '(\d+)'")] 
    public void Case2(int a, int b) 
    { 
     // Short but sweet step definition that calls into automation layer 
    } 

    [Given(@"case one with three ints '(\d+)' and '(\d+)' and also '(\d+)'")] 
    public void Case3(int a, int b , int c) 
    { 
     // Short but sweet step definition that calls into automation layer 
    } 

を:結合方法 'Class1.MyGiven(のInt32、のInt32、のInt32)' は1つのパラメータ

は、だから私はこのように私の最初のソリューションにフォールバックを持っている必要があります前後に行くことによってあまりにも多くの混乱。申し訳ありません - バス上でIDEを準備していません:)

+0

... –

+0

がそこに従っていませんでした...「アウトリファクタリング」あなたは何を意味するのですか? –

+0

あなたが100歩歩いているとすれば、私は300ステップを定義する必要があります。むしろ、ステップの一部が引数substring-parser –

0

これはデフォルトではオプションのパラメータや通過を必要とする関数をオーバーロード、私のためにうまくいきました。

specflowがオプションのパラメータをサポートしていれば素晴らしいでしょう。 string searchTerm = "" ですが、現時点ではありません。

[When(@"I request a list of managers")] 
public void WhenIRequestAListOfManagers() 
{ 
    WhenIRequestAListOfManagers(""); 
} 

[When(@"I request a list of managers with the search term (.*)")] 
public void WhenIRequestAListOfManagers(string searchTerm) 
{ 
    //do stuff 
} 
私はそれがほとんどのルールに適用されますので、オプションの日付が出てリファクタリングした何かを期待していた
関連する問題