8

SpecFlow では、ステップ定義に文字列が存在するかどうかを確認したいのですが、現在、次の不自然な例のような扱いにくいことを行っています。

[Given(@"Foo ( bar)?")]
public void GivenFoo(string bar)
{
    if (bar == " bar")
    {
        // do bar
    }
}

ただし、次のようなことをしたいと思います。

[Given(@"Foo ( bar)?")]
public void GivenFoo(bool bar)
{
    if (bar)
    {
        // do bar
    }
}

しかし、方法がわからないので、これは可能ですか?

4

3 に答える 3

1

あなたの質問と Jakub の回答へのコメントに基づいて、サイト内の複数のユーザー ジャーニーをカバーできる単一のステップを作成しようとしているようです。SpecFlow は実際にはこのように設計されていません。おそらく、シナリオ/機能の構造を試して改善する必要があることを示しています。

あなたの質問に直接答えるために、ステップ定義内の特定の文字列の存在に基づいてブール値を推測する方法があるとは思いません。

このルートを維持したい場合は、元の例がおそらく最善の策です。

ただし、このアプローチを採用しないことをお勧めします。代わりに、ステップ定義を再構築して、それらを連鎖させ、シナリオ間で再利用できるようにすることをお勧めします。私は実際、あなたのソリューションに合うステップ定義の例を考えるのに苦労しています.

マルチステップ アプローチの例は、次のようになります。

Given I have logged in as an existing user //1
And I have started my 6-step registration process //2
And I have filled in valid address values on step 1 //3
And I have left the fields blank on step 2 //4
... etc
When I save my registration

そして、あなたのステップは次のようになります:

  1. ログインページに移動し、有効なユーザーとしてログインします
  2. ステップ 1 に移動します
  3. フィールドに有効な入力を入力し、[次へ] をクリックします
  4. 「次へ」をクリック

各ステップが可能な限り他のステップから独立していることを確認する必要があるだけで、他のステップに影響を与えることなく、(新しいシナリオの場合) 1 つのステップを微妙に異なるステップに置き換えることができます。

このアプローチを使用しても、複雑な (そして潜在的に非常に冗長な) シナリオになる可能性はありますが、これは、賢く、単一のステップ定義に詰め込むよりも優れたソリューションだと思います。おそらく、最終的に判読不能なシナリオになり、コードを読む/維持するのも面倒になるでしょう。

于 2013-05-01T06:07:54.757 に答える
0

何方をお探しですか:

[Given(@"I do something (times) times")]
public void GivenIDoSomething(int times)
{
}

それ以外はこれで十分だと思われる

[Given(@"I do something twice")]
public void GivenIDoSomethingTwice()
{
}

編集

ステップ内のステートメントの代わりに、if実際にステップを分離したいと思います。

于 2013-04-24T14:56:44.250 に答える