2015-06-25 16 views
10

Her bir parametreyi ayrı ayrı geçirmek yerine bir dizi parametre iletmenin bir yolu var mı?Değişken dizisini değişkenlikte geçirme

Örneğin aşağıdaki senaryo var:

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

liste yukarıda devam edebilir. Bunun yerine yukarıdaki değişkenlerin tümünü bir dizide aktarabilir miyim?

+0

Evet, bkz .: http://www.specflow.org/documentation/SpecFlow-Assist-Helpers/ – Blorgbeard

+0

Bunun tablo işlevinden mi bahsediyorsunuz? – AutomateFr33k

+0

Sanırım bunu deneyebilirim. Bu işlevselliği nasıl özlediğimi merak ediyorum. | Aşağıdaki değerler geçerlidir Sonra bir site giriş: Ama neyse – AutomateFr33k

cevap

14

Bir virgülle ayrılmış dizesi geçirmek ve sonra bir liste haline dönüştürebilir: Eğer örneklerden gelmek değerleri istiyorsanız

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

sonra yerine yapabilirsiniz:

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| 

ise Bir tablo kullanmak istediğinizde, bunu yapabilirsiniz:

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| 

(eğer başlıkları varsa İstediğiniz ve sadece bu ile örnekler kullanabilir bence satır değerlerini)

kullanın: Bu yardım olabilir

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

sayesinde aslında Sen Örneğin kullanabilirsiniz ... thats doğru değil FirstName | Soyadı | MiddleName | Tebrik | Vb | | | | | | | Örnekler | FirstName | Soyadı | MiddleName | Tebrik | Vb | | Joe | Bloggs | Peter | Bay | alırsın | – Festivejelly

+0

Biçimlendirme ... – Festivejelly

+0

@Festivejellyfinally cevabı güncellemek için yuvarlak bir şekilde var, teşekkürler! –

1

: https://github.com/techtalk/SpecFlow/wiki/Step-Argument-Conversions

sizin Ortak için aşağıdaki kod parçacığı ekleme Basamak Tanım Dosyası:

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

SpecFlow, otomatik olarak tüm özel ayrımlı değerleri Otomatik Doldurma Adımları verilerinde dönüştürecektir. dizeleri bir dizi içine tablo.

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

, bir test aşaması için beklenen değere bağlı olarak, sen isteyebilirsiniz:

Ardından bireysel adım bağlama işlevi, [] aşağıda kod parçasında olduğu gibi dize olarak giriş parametresinin türünü değiştirmek Uygun tip dönüşümünü uygulamak.