0

SpecFlow でシナリオ アウトラインを使用する。

Scenario Outline: Invalid Login Details

Given some pre-conditions...
When user "Larry" enters username <username> and password <password>
Then the message "Invalid Login Details" should be displayed

Examples:
|username|password|
|larry06 |        |
|larry06 |^&*%*^$ |
|%^&&**  |pass123 |
|        |pass123 |

「When」ステップは次のように評価されると予想していました。

public void WhenUserEntersUsernameAndPassword(String username, String password){}

そして、シナリオは 4 回実行されます - テーブルの各行に対して、必要に応じて値を渡します。そうではありません。

代わりに、SpecFlow は 4 つの必須ステップ定義のうちの 1 つを作成します。

[When(@"""(.*)"" provides the following new username larry(.*) and password ")]
public void WhenUserEntersUsernameLarryAndPassword(string p0, int p1)
{
//TODO
}

残りの 3 つを「機能させる」には、テーブル内の他の値と明示的に一致するメソッドを手動で記述する必要があります。

それ以来、私はただ言うことができることに気づきました:

When "Larry" enters username "<username>" and password "<password>"

そして私は得る:

[When(@"""(.*)"" provides the following ""(.*)"" and ""(.*)""")]
public void WhenUserEntersUsernameAndPassword(string p0, string name, string pass)
{
//TODO
}

完全。

しかし、すべてのドキュメントは、私が "" を必要としないことを示唆しているようで、それはうまくいくはずです (例: https://github.com/cucumber/cucumber/wiki/Scenario-outlines )。私のノート:

「ステップ定義がプレースホルダーと一致する必要はありません。プレースホルダーを置き換える値と一致する必要があります」

テーブルの各行に個別のステップ定義を書くことの価値が本当にわかりません。

このニュアンスは SpecFlow に固有のものですか?

4

1 に答える 1

2
When "Larry" enters username <username> and password <password>

一致します

[When(@"""(.*)"" enters username (.*) and password (.*)")]
public void WhenEntersUsernameAndPassword(string p0, string name, string pass)
{
//TODO
}

したがって、ドキュメントは問題ありません。

あなたが経験した問題は、ステップテキストの自動生成が"..."、「(.*)」と一致する交換可能な文字列を渡していることを示す指標として使用しているに違いないと思いますが、引用符が必要ない場合でも、手動で修正できます。

于 2012-10-09T16:09:27.573 に答える