2015-06-25 17 views
10

Có cách nào để truyền một mảng tham số thay vì truyền từng tham số riêng lẻ không?Truyền các mảng biến trong thông số

Ví dụ tôi có các tình huống sau:

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

Danh sách này có thể tiếp tục ở trên. Thay vào đó tôi có thể vượt qua tất cả các biến trên trong một mảng?

+0

Có, xem: http://www.specflow.org/documentation/SpecFlow-Assist-Helpers/ – Blorgbeard

+0

Bạn đang nói về chức năng của bảng? – AutomateFr33k

+0

Tôi đoán tôi có thể thử. Tự hỏi làm thế nào tôi bị mất chức năng này. Nhưng nhờ anyways – AutomateFr33k

Trả lời

14

Bạn có thể vượt qua một chuỗi dấu phẩy tách ra và sau đó biến nó thành một danh sách:

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

nếu bạn muốn các giá trị đến từ các ví dụ sau đó bạn có thể làm điều này thay vì:

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| 

Nếu bạn muốn sử dụng một bảng thì bạn có thể thực hiện việc này thay thế:

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| 

(bạn có thể bỏ qua tiêu đề nếu bạn muốn và chỉ cần sử dụng các giá trị hàng tôi nghĩ)

bạn cũng có thể sử dụng ví dụ với điều này:

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

thực sự thats không đúng ... Bạn có thể sử dụng Ví dụ: Khi tôi đăng nhập vào một trang web sau đó các giá trị sau là hợp lệ | FirstName | Họ | MiddleName | Lời chào | Vv | | | | | | | Ví dụ | FirstName | Họ | MiddleName | Lời chào | Vv | | Joe | Bloggs | Peter | Mr | bạn nhận được | – Festivejelly

+0

Ohh định dạng ... – Festivejelly

+0

@Festivejellyfinally có vòng để cập nhật câu trả lời, cảm ơn! –

1

Điều này có thể giúp đỡ: https://github.com/techtalk/SpecFlow/wiki/Step-Argument-Conversions

Thêm đoạn mã sau vào Common của bạn Bước Định nghĩa Tệp:

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

SpecFlow sau đó sẽ tự động chuyển đổi tất cả các giá trị được phân cách bằng dấu phẩy trong dữ liệu SpecFlow Steps bảng thành một chuỗi các chuỗi.

Sau đó, trong ràng buộc bước chức năng cá nhân của bạn, thay đổi kiểu của tham số đầu vào như string [] như trong đoạn mã dưới đây:

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

Sau đó, dựa trên giá trị kỳ vọng của bạn cho một bước kiểm tra, bạn có thể muốn để áp dụng chuyển đổi loại thích hợp.

Các vấn đề liên quan