10

現在、次のステップがあります。

[When(@"I set the scenario price for product (.*) to (.*)")]
public void WhenISetTheScenarioPriceForProductPToN(string product, string priceStr)

ステップを追加したい:

[When(@"I set the scenario price for product (.*) to (.*) in the (.*) zone")
public void WhenISetTheScenarioPriceInZoneForProductPToN(string product, string priceStr, string zone)

ただし、仕様フローでは、2 つのステップ間で「ステップに対してあいまいなステップ定義が見つかりました」というエラーが発生します。

私は疲れました:

  [When(@"I set the scenario price for product (.*) to (.*) in the (.*) zone")]
  [When(@"I set the scenario price for product (.*) to (.*)")]
  public void WhenISetTheScenarioPriceInZoneForProductPToN(string product, string priceStr, string zone)

しかし、それは「バインディング エラー: パラメータ数の不一致!」で失敗します。2番目の「いつ」にnullが渡されることを望んでいました。

4

2 に答える 2

11

問題は 2 番目の (.*) です。これは、「abc ゾーンの xyz」に一致するように拡張できます。代わりに、1 つの単語だけを一致させることはできますか? すなわち (\w+)

[When(@"I set the scenario price for product (.*) to (\w+)")]

これにより、abc ゾーンでの短い正規表現の一致も防止されます。

長い When 属性とメソッドをコメントアウトし、デバッグして短いものと一致するものを確認することで、これをテストできます。

また、常に同じ数の正規表現をパラメーターとして持つ必要があるため、組み合わせたものは機能しません。


これは私にはうまくいきませんでした。これは、「0.99」と「.」の価格が原因です。\w と一致しません。ただし、これは機能します:

[When(@"I set the scenario price for product (.*) to (\S+)")]
public void WhenISetTheScenarioPriceForProductPToN(string product, string priceStr)

「テスト値」にはスペースが含まれていないためです。

于 2012-12-07T13:17:26.760 に答える
4

私は当初、これは最初のステップの定義の最後にある正規表現が原因であると信じていました。

[When(@"I set the scenario price for product (.*) to (.*)")]

後続の定義に入るのと同じ文字列をキャプチャ(または一致)します。

ただし、それと、2つのステップの実装メソッドにあいまいな引数タイプが含まれているという事実ですint(私のコメントによると)使用したため、最初はこれを再現できませんでしたが、使用すると、あいまいな状態でstringこの問題を再現できます。stringステップ定義ファイルで引数として指定されたパラメーターはすべて、として扱うことができますstring

ステップメソッドを次のように変更します。

public void WhenISetTheScenarioPriceInZoneForProductPToN(string product, double price, string zone)

public void WhenISetTheScenarioPriceForProductPToN(string product, double price)

現在、正規表現は変更されていないため、理論的には依然として貪欲に一致しますが、SpecFlowはプリミティブ型(およびカスタム変換による他の型)への変換を提供するため、文の残りの部分は無視されます。これは、 (文の一部が文字列引数に一致するか、より多くの引数が埋め込まれているかを判断できないのとは対照的に)stringの後に最後のパラメーターを検出するため、あいまいではないことを意味します。double

于 2012-12-07T12:57:45.303 に答える