2017-12-12 6 views
0

Ich konvertierte einen SpecFlow-Schritt, um von StepArgumentTransformation abhängig zu sein, so dass ich nicht mit mehreren primitiven Parametern arbeiten müsste, sondern einen einzelnen komplexen Parameter verwenden könnte, der mit einer Transformationsmethode erstellt wurde.Wie kann ich überflüssige Parameter aus der Schrittmethode SpecFlow entfernen, wenn die Transformation für Schrittargumente verwendet wird?

Aber ich habe gelernt, dass ich die primitiven Parameter aus dem Schritt nicht entfernen konnte, da dies zu einer "parameter count mismatch" Ausnahme führen würde.

[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; 
} 

Wie kann ich die x und y Parameter im Schritt-Methode loszuwerden?

Antwort

0

Sie müssen die Regex der Bindung anpassen.

Hier ist ein konkretes Beispiel:

[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' 

Sie ein Beispiel finden Sie hier: https://github.com/techtalk/SpecFlow-Examples/tree/master/SpecFlow.Examples.StepArgumentTransformation

Die Dokumentation für Schritt Argument Transformation ist hier: http://specflow.org/documentation/Step-Argument-Conversions/

+0

Cool, danke! Tatsächlich werden die Klammern von SpecFlow verwendet und das Herumspielen mit ihnen scheint den Trick gemacht zu haben: '(etwas \ d \ d)' wird als Abbildung auf ein einzelnes Argument interpretiert (beachten Sie nur ein Paar Klammern), und SpecFlow verwendet die Transformation um den Wert für dieses Argument anzugeben. –

Verwandte Themen