2015-06-25 12 views
10

Czy istnieje sposób przekazywania tablicy parametrów zamiast przekazywania każdego parametru osobno?Przekazywanie tablic zmiennych w przepływie

Na przykład mam następujące scenariusze:

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

Lista może iść wyżej. Zamiast tego mogę przekazać wszystkie powyższe zmienne w tablicy?

+0

Tak, patrz: http://www.specflow.org/documentation/SpecFlow-Assist-Helpers/ – Blorgbeard

+0

Czy mówisz o funkcjonalności tabeli? – AutomateFr33k

+0

Chyba mogę spróbować. Ciekawe, jak tęskniłem za tą funkcjonalnością. Ale dzięki jakikolwiek – AutomateFr33k

Odpowiedz

14

można przekazać oddzielonych przecinkami ciąg znaków, a następnie przekształcić go w liście:

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

jeśli chcesz wartości pochodzą z przykładów to można to zrobić w zamian:

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| 

Jeśli chcesz użyć tabeli, możesz to zrobić:

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| 

(możesz pominąć nagłówki, jeśli chcesz i po prostu użyć wartości wierszy myślę)

można również użyć przykładów z tego:

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

faktycznie ów nie prawda ... Można użyć Na przykład: Kiedy zalogować się na stronie wówczas następujące wartości są ważne | FirstName | LastName | MiddleName | Powitanie | Etc | | | | | | | Przykłady | FirstName | LastName | MiddleName | Powitanie | Etc | | Joe | Bloggs | Peter | Pan | dostajesz | – Festivejelly

+0

Ohh formatowanie ... – Festivejelly

+0

@Festivejellyfinally dostałem rundy aktualizacji odpowiedzi, dzięki! –

1

To może być pomocne: https://github.com/techtalk/SpecFlow/wiki/Step-Argument-Conversions

Dodaj następujący fragment kodu do Twojego Common Plik definicji kroku:

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

SpecFlow automatycznie konwertuje wszystkie wartości rozdzielone przecinkami w danych Stepów SpecFlow tablica do tablicy łańcuchów.

Następnie w indywidualnej funkcji wiązania kroku, zmienić typ parametru wejściowego jako string [] jak w fragmencie poniżej:

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

Następnie, w oparciu o wartości oczekiwanej dla etapu testowego, może chcesz zastosować odpowiednią konwersję typu.

Powiązane problemy