2017-12-12 19 views
0

SpecFlowステップをStepArgumentTransformationに依存するように変換したので、複数のプリミティブパラメータを処理する必要はありませんでしたが、変換メソッドで構築された1つの複雑なパラメータを使用できます。ステップの引数変換を使用するときに、SpecFlowステップメソッドから余分なパラメータを削除するにはどうすればよいですか?

しかし、私はステップからプリミティブパラメータを削除できないことを知りました。これは、 "パラメータ数の不一致"例外が発生するためです。

[Given("(something (\d) (\d))")] 
public void Step(Something something) 
{ 
    // Does not work (parameter count mismatch) 
} 

[Given("(something (\d) (\d))")] 
public void Step(Something something, int x, int y) 
{ 
    // Works, but is slightly confusing due to unused parameters 
} 

[StepArgumentTransformation("something (\d) (\d)")] 
public Something Transform(int x, int y) 
{ 
    var something = new Something(x, y); 
    return something; 
} 

にはどうすればステップ方式でxyパラメータを取り除くことができますか?

答えて

0

バインディングの正規表現を適合させる必要があります。ここで

は、具体的な例である:

[Given("the coordinates are '(.*)'")] 
public void Step(Something something) 
{ 
    // Does not work (parameter count mismatch) 
} 

[StepArgumentTransformation("X:(\d)/Y:(\d)")] 
public Something Transform(int x, int y) 
{ 
    var something = new Something(x, y); 
    return something; 
} 

Usage: 

Scenario: coordinate system 

    Given the coordinates are 'X:1/Y:2' 

あなたがここに例を見つけることができます。ステップ引数変換のためのhttps://github.com/techtalk/SpecFlow-Examples/tree/master/SpecFlow.Examples.StepArgumentTransformation

ドキュメントはここにある:http://specflow.org/documentation/Step-Argument-Conversions/

+0

クール、ありがとう!実際には、括弧はSpecFlowによって使用されていて、それらを使って遊んでいると、トリックが実行されたように見えます。 '(something \ d \ d)'は単一の引数(1組のカッコしか見えません)へのマッピングとして解釈され、SpecFlowは変換その議論の価値を提供する。 –

関連する問題