9

ステップの多くが「最初のパラメーター」として0、1、または2つの日付を取る必要があるという事実をどのように処理するのが最善ですか?たとえば、Specflowでオプションの引数をサポートするにはどうすればよいですか?

最も簡単なケースは、ステップが次々に発生する限り、日付が問題にならない場合です。

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

ただし、多くの場合、次のような時間に依存する多くのステップ

 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つの日付があります。例えば。Peterは、送金のために印刷されたフォーム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 
4

3 に答える 3

6

2つのことが頭に浮かびます。

まず、私は今、ステップ定義が短く(ワンライナー)、テスト対象のシステムを自動化するのに役立つある種の自動化レイヤーまたはDSLを呼び出す限り、多くのステップ定義を気にする必要はありません。インスピレーションを得るために、この優れたプレゼンテーションをご覧ください。

したがって、その意味では、各ケースの「オーバーロード」を使用してステップ定義を2倍にすることができます。

2番目の解決策を最初に試したのは、同じメソッドの属性を互いに積み重ねることでした。これは機能しますが、オプションのパラメーターでは機能しません。(オプションのパラメーターは、DateTimeなどの参照型ではうまく機能しませんが、DateTime?null許容型は機能します)。このようにステップをステップアップすると、次のようなエラーが発生します。

パラメータ数の不一致!バインディングメソッド'Class1.MyGiven(Int32、Int32、Int32)'には1つのパラメーターが必要です

だから私はこのような私の最初の解決策にフォールバックします:

    [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
    }

行ったり来たりしてあまり混乱を起こさなかったといいのですが。申し訳ありませんが、バスにIDEの準備ができていませんでした:)

于 2012-04-24T06:58:28.440 に答える
5

複数のステップの単純さを好みますが、提案したことを実行したい場合は、適切な正規表現を作成する必要があります。次のようなもの(テストされていません):

[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)
于 2012-05-02T12:29:38.973 に答える
3

これは私にとってはうまく機能し、オプションのパラメーターを必要とする関数をオーバーロードし、デフォルトを渡しました。

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
}
于 2014-04-01T13:47:13.723 に答える