2013-12-12 14 views
5

Đây là dưa chuột của tôi:Specflow Kịch bản Outline không tạo dự kiến ​​đang bước

Scenario Outline: Login using valid email address 
Given I have not logged into the current computer 
And Username <username> and password <password> is a valid account 
When I start the client 
And Login using username <username> and password <password> 
Then The client should navigate to first time screen 

Examples: 
| username   | password | 
| [email protected] | password001 | 
| valid002   | password002 | 

này tạo ra các tập tin bước sau:

[Binding] 
public class UserLoginSteps 
{ 
    [Given(@"I have not logged into the current computer")] 
    public void GivenIHaveNotLoggedIntoTheCurrentComputer() 
    { 
     ScenarioContext.Current.Pending(); 
    } 

    [Given(@"Username valid(.*)@xyz\.com and password password(.*) is a valid account")] 
    public void GivenUsernameValidXyz_ComAndPasswordPasswordIsAValidAccount(int p0, int p1) 
    { 
     ScenarioContext.Current.Pending(); 
    } 

    [When(@"I start the client")] 
    public void WhenIStartTheClient() 
    { 
     ScenarioContext.Current.Pending(); 
    } 

    [When(@"Login using username valid(.*)@xyz\.com and password password(.*)")] 
    public void WhenLoginUsingUsernameValidXyz_ComAndPasswordPassword(int p0, int p1) 
    { 
     ScenarioContext.Current.Pending(); 
    } 

    [Then(@"The client should navigate to first time screen")] 
    public void ThenTheClientShouldNavigateToFirstTimeScreen() 
    { 
     ScenarioContext.Current.Pending(); 
    } 
} 

Những vấn đề như sau:

  • tạo regex cho tên người dùng dựa trên mục nhập đầu tiên trong cột ví dụ. Đây không phải là điều tôi muốn vì không phải tất cả các ví dụ đều tuân theo mẫu đó.
  • Tên phương pháp đang sử dụng mục nhập đầu tiên trong cột ví dụ (ví dụ: Khi đăng nhậpUsingUsernameValidXyz_ComAndPasswordPassword). Điều này rất khó đọc và nếu dữ liệu trong bảng ví dụ thay đổi tên phương thức không còn đúng, hãy điền vào các thông số int. Họ nên là chuỗi.

Tôi mong chờ thế hệ nét bước để một cái gì đó ra như thế này:

[When(@"Login using username (.*) and password (.*)")] 
    public void WhenLoginUsingUsernameAndPassword(string p0, string p1) 
    { 
     ScenarioContext.Current.Pending(); 
    } 

Tôi có thiếu cái gì? Có cách nào để ảnh hưởng đến cách SpecFlow tạo ra các phương pháp bước cho Kịch bản phác thảo? Nếu không, cách tốt nhất để khắc phục điều này là gì nếu không có mã tính năng được tạo sau khi thay đổi các thay đổi của tôi

Trả lời

4

Tóm lại, tin tốt. Các liên kết được tạo tự động này chỉ là sự tiện lợi và không tự động được tạo lại. Trong thực tế tôi đã luôn luôn tự mình xây dựng bằng tay.

Điều này có nghĩa bạn có thể đi và thay đổi chúng mà không lo lắng về họ nhận clobbered :-)

SpecFlow hoạt động bằng cách tự động tạo tập tin * .feature.cs mỗi khi bạn chỉnh sửa một tập tin * .feature. Chúng không bao giờ được chỉnh sửa, nhưng nếu bạn nhìn qua chúng, bạn có thể thấy rằng về cơ bản chúng có các dòng Given, When và Then từ các kịch bản của bạn và chuyển chúng thành các đối số cho các phương thức nội bộ của nó. Đằng sau hậu trường, SpecFlow sử dụng sự phản chiếu để tìm tất cả các lớp học của bạn có thuộc tính [Binding] trên chúng, sau đó xem xét tất cả các phương thức lớp đó có thuộc tính [Given], [When] hoặc [Then] để tìm danh sách các regex. Regex phù hợp nhất xác định phương thức cần gọi. Đây là lý do tại sao Bindings thường được mô tả là toàn cầu và không thực sự được xây dựng bằng cách sử dụng thừa kế (khi bạn kết thúc với nhiều regexes giống nhau).

Quay lại các kết buộc được tạo mà bạn có, chúng chỉ được tạo trong trình chỉnh sửa khi plugin VS của SpecFlow phát hiện bạn không có regex phù hợp và bạn cố điều hướng đến định nghĩa (F12) trong tệp tính năng . Chúng thực sự là trình giữ chỗ cho bạn xây dựng từ đó.

+4

Đồng ý. Đối xử với regex được tạo tự động chỉ là một gợi ý, nó không phải lúc nào cũng nhận được nó khá đúng (xử lý ngôn ngữ tự nhiên là khó). Một mẹo, nếu bạn gắn dấu ngoặc kép xung quanh những thứ như trong các bước của bạn thì đôi khi nó cung cấp cho SpecFlow đủ gợi ý rằng nó tạo ra kết quả hợp lý hơn. Ví dụ: 'Và Tên người dùng' "và mật khẩu" "là tài khoản hợp lệ' sẽ khiến SpecFlow tạo bước bằng' [Given (@ "Tên người dùng" "(. *)" "Và mật khẩu" "(. *) "" là một tài khoản hợp lệ ")]'. –

0

Bạn nên sử dụng dấu nháy đơn để biểu thị rằng SpecFlow phải sử dụng toàn bộ chuỗi thay vì số.

Examples: 
| username   | password  | 
| '[email protected]' | 'password001' | 
| 'valid002'   | 'password002' | 
Các vấn đề liên quan