2012-04-23 38 views
6

Làm cách nào để xử lý tốt nhất thực tế là nhiều bước của tôi nên lấy 0, 1 hoặc thậm chí 2 ngày là "thông số đầu tiên"? Ví dụ, làm thế nào để thực hiện tốt nhất hỗ trợ cho các đối số tùy chọn trong SpecflowTham số tùy chọn với Specflow

Trường hợp đơn giản nhất là khi ngày là không có mối quan tâm miễn là các bước xảy ra sau mỗi khác

Given Peter was born 23-06-1973 
And Peter created an account 
And Peter deposited $200 

Thông thường, mặc dù rất nhiều bước phụ thuộc vào thời gian, chẳng hạn như

Given Peter was born 23-06-1973 
And at 1-4-2012 Peter created an account 
And at 13-4-2012 Peter deposited $200 

Vào những thời điểm khác có hai ngày như ngày thực tế và ngày xảy ra sự cố. Ví dụ. Peter điền vào một mẫu đơn được in từ ngày 14-4-2012 để chuyển tiền, nhưng biểu mẫu đã bị mất trong vài ngày, và chúng ta cần phải ghi lại ngày hôm nay rằng biểu mẫu đã được điền vào một vài ngày trước.

Given Peter was born 23-06-1973 
... 
And at 16-4-2012 really at 14-4-2012 Completed a transfer form to transfer $100 to account 12345 

Trả lời

3

Tôi thích sự đơn giản của nhiều bước, nhưng nếu bạn muốn làm những gì bạn đề xuất, bạn sẽ cần phải tạo một regex phù hợp. Một cái gì đó như (không được kiểm tra):

[Given(@"(at ([0-9-]+) (really at ([0-9-]+) |)|)(\w+) Completed a transfer form to transfer \$(\d+) to account (\d+)"] 
public void TransferStep(string dummy1, DateTime? atDate, string dummy2, DateTime? reallyAtDate, string name, decimal amount, int account) 
4

Hai điều bật ra trong đầu tôi:

Trước hết tôi bây giờ là một ngày không lo lắng đến nhiều vì có vô số định nghĩa bước miễn là họ đang thiếu (oneliners) và gọi vào một số loại lớp tự động hóa hoặc DSL giúp tôi tự động hóa hệ thống đang được kiểm tra. Xem phần này excellent presentation để lấy cảm hứng.

Vì vậy, trong ý nghĩa đó, bạn chỉ có thể tăng gấp đôi các định nghĩa bước với "quá tải" cho từng trường hợp.

Cú đâm đầu tiên của tôi trên giải pháp thứ hai là xếp các thuộc tính lên trên cùng nhau cho cùng một phương pháp. Điều đó hoạt động, nhưng không phải cho các tham số tùy chọn. (Và các tham số tùy chọn không hoạt động tốt với các kiểu tham chiếu như DateTime, nhưng DateTime? Nullable works). Nếu bạn thực hiện các bước như vậy, bạn sẽ gặp lỗi như sau:

Không khớp số tham số! Phương pháp ràng buộc 'Class1.MyGiven (Int32, Int32, Int32) nên có 1 thông số

Vì vậy, tôi rơi trở lại với giải pháp đầu tiên của tôi như thế này:

[Given(@"case one with one int '(\d+)'")] 
    public void Case1(int a) 
    { 
     // Short but sweet step definition that calls into automation layer 
    } 

    [Given(@"case one with two ints '(\d+)' and '(\d+)'")] 
    public void Case2(int a, int b) 
    { 
     // Short but sweet step definition that calls into automation layer 
    } 

    [Given(@"case one with three ints '(\d+)' and '(\d+)' and also '(\d+)'")] 
    public void Case3(int a, int b , int c) 
    { 
     // Short but sweet step definition that calls into automation layer 
    } 

Tôi hy vọng tôi không gây ra quá nhiều sự nhầm lẫn bằng cách đi qua lại. Xin lỗi - không có IDE sẵn sàng trên xe buýt :)

+0

Tôi đã hy vọng điều gì đó mà ngày tùy chọn được cấu trúc lại vì nó sẽ áp dụng cho hầu hết các quy tắc ... –

+0

Không theo bạn ở đó ... Ý của bạn là "được tái cấu trúc"? –

+0

Giả sử bạn có 100 bước, với cách tiếp cận của bạn, tôi cần phải xác định 300 bước .. thay vì tôi đã hy vọng rằng một phần của các bước có thể được chuyển xuống đối số một số phân tích cú pháp phân tích cú pháp –

0

Điều này làm việc tốt cho tôi, quá tải các chức năng yêu cầu tham số tùy chọn và chuyển mặc định.

Sẽ thật tuyệt nếu các tham số tùy chọn được hỗ trợ bởi luồng thông số, ví dụ: string searchTerm = "" nhưng hiện tại không có.

[When(@"I request a list of managers")] 
public void WhenIRequestAListOfManagers() 
{ 
    WhenIRequestAListOfManagers(""); 
} 

[When(@"I request a list of managers with the search term (.*)")] 
public void WhenIRequestAListOfManagers(string searchTerm) 
{ 
    //do stuff 
} 
Các vấn đề liên quan