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 に固有のものですか?