2015-06-25 15 views
10

C'è un modo per passare una serie di parametri invece di passare ciascun parametro individualmente?Passare array di variabili in specflow

Per esempio io ho i seguenti scenari:

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

La lista può andare avanti sopra. Invece posso passare tutte le variabili di cui sopra in un array?

+0

Sì, consultare: http://www.specflow.org/documentation/SpecFlow-Assist-Helpers/ – Blorgbeard

+0

Stai parlando della funzionalità della tabella? – AutomateFr33k

+0

Credo di poter provare. Mi chiedo come ho perso questa funzionalità. Ma grazie comunque – AutomateFr33k

risposta

14

È possibile passare una stringa separati da virgola e poi trasformarlo in un elenco:

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(); 
} 

se si desidera che i valori per venire da esempi allora si potrebbe fare questo, invece:

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| 

Se vuoi usare una tabella, puoi farlo invece:

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| 

(potresti omettere le intestazioni se si vuole e basta usare i valori di riga credo)

è anche possibile utilizzare gli esempi di questo:

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

in realtà non è cosa vera ... è possibile utilizzare il Ad esempio: quando faccio il login a un sito quindi i seguenti valori sono validi | FirstName | LastName | MiddleName | saluto | Ecc | | | | | | Esempi | FirstName | LastName | MiddleName | saluto | Ecc | Joe | Bloggs | Peter | Mr | ottieni | – Festivejelly

+0

Ohh la formattazione ... – Festivejelly

+0

@Festivejellyfinally si è avvicinata all'aggiornamento della risposta, grazie! –

1

Questo potrebbe essere di aiuto: https://github.com/techtalk/SpecFlow/wiki/Step-Argument-Conversions

aggiungere il seguente frammento di codice al tuo Comune Step Definition File:

[StepArgumentTransformation] 
public string[] TransformToArrayOfStrings(string commaSeparatedStepArgumentValues) 
{ 
    string sourceString = commaSeparatedStepArgumentValues; 
    string[] stringSeparators = new string[] { "," }; 
    return sourceString.Split(stringSeparators, StringSplitOptions.None); 
} 

SpecFlow convertirà automaticamente tutti i valori separati da virgola nei dati SpecFlow Steps tabella in una serie di stringhe.

Poi, nel tuo funzione individuale vincolante passo, modificare il tipo del parametro di ingresso come stringa [] come nel frammento di seguito:

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

Poi, in base al valore atteso per un passo di prova, si consiglia per applicare la conversione del tipo appropriato.