2015-06-25 6 views
10

Gibt es eine Möglichkeit, ein Array von Parametern zu übergeben, anstatt jeden Parameter einzeln zu übergeben?Übergeben von Arrays der Variablen in specflow

Zum Beispiel habe ich die folgenden Szenarien:

When i login to a site 
then <firstname>, <lastname>, <middleName>, <Desingation>, <Street>, <Apartmentno> are valid 

Die obige Liste weitergehen kann. Kann ich stattdessen alle oben genannten Variablen in einem Array übergeben?

+0

Ja, siehe: http://www.specflow.org/documentation/SpecFlow-Assist-Helpers/ – Blorgbeard

+0

Sprechen Sie über die Tabellenfunktionalität davon? – AutomateFr33k

+0

Ich denke, ich kann das versuchen. Ich frage mich, wie ich diese Funktionalität vermisst habe. Aber dank sowieso – AutomateFr33k

Antwort

14

Sie können eine durch Komma getrennte Zeichenfolge übergeben und dann in eine Liste umwandeln:

When i login to a site 
then 'Joe,Bloggs,Peter,Mr,Some street,15' are valid 

[Then("'(.*)' are valid")] 
public void ValuesAreValid(List<String> values) 
{ 
} 

[StepArgumentTransformation] 
public List<String> TransformToListOfString(string commaSeparatedList) 
{ 
    return commaSeparatedList.Split(",").ToList(); 
} 

wenn Sie die Werte wollen aus den Beispielen kommen, dann können Sie diese stattdessen tun:

When I login to a site 
then '<values>' are valid 
Examples 
| values       | 
| Joe,Bloggs,Peter,Mr,Some street,15| 
| Joe,Bloggs,Peter,Mr,Some street,16,SomethingElse,Blah| 

Wenn Sie möchten stattdessen eine Tabelle verwenden:

When I login to a site 
then the following values are valid 
    | FirstName | LastName | MiddleName | Greeting| Etc | Etc  | 
    | Joe  | Bloggs | Peter  | Mr  | you get| The Idea| 

(Sie könnten die Header weglassen, wenn Sie wollen und nur die Zeilenwerte verwenden, glaube ich)

Sie auch Beispiele mit diesem verwenden können: https://github.com/techtalk/SpecFlow/wiki/Step-Argument-Conversions

Fügen Sie den folgenden Code-Schnipsel zu Ihrem Häufig:

When I login to a site 
then the following values are valid 
    | FirstName | LastName | MiddleName | Greeting | Etc | Etc  | 
    | <name> | <lastName>| <middleName>| <greeting>| <etc> | <etc> | 
+1

das ist eigentlich nicht wahr ... Sie die Zum Beispiel verwenden: Wenn ich auf einer Website anmelden dann die folgenden Werte gelten | Vorname | Nachname | ZweiterName | Gruß | Etc. | | | | | | Beispiele | Vorname | Nachname | ZweiterName | Gruß | Etc. | Joe | Bloggs | Peter Herr du bekommst | – Festivejelly

+0

Ohh die Formatierung ... – Festivejelly

+0

@Festivejellyfinally ging um die Antwort zu aktualisieren, danke! –

1

Dies könnte Hilfe Schrittdefinitionsdatei:

SpecFlow konvertiert dann automatisch alle kommagetrennten Werte in die SpecFlow Steps-Daten Tabelle in ein Array von Strings.

Dann in Ihrem individuellen Schritt Bindungsfunktion, den Typ des Eingangsparameter ändern, wie string [] wie in Schnipsel unten:

[Then(@"the expected value is '(.*)'")] 
public void ThenTheExpectedValueIs(string[] p0) 
{ 
    //ScenarioContext.Current.Pending(); 
    Assert.AreEqual(25, Convert.ToInt32(p0[0])); 
    Assert.AreEqual(36, Convert.ToInt32(p0[1])); 
    Assert.AreEqual(79, Convert.ToInt32(p0[2])); 
} 

Dann wird basierend auf dem erwarteten Wert für einen Prüfschritt, können Sie wollen um die entsprechende Typumwandlung anzuwenden.