2011-01-14 7 views
5

Chỉ muốn chắc chắn rằng tôi hiểu mọi thứ. Từ những gì tôi thu thập cho đến nay, Cucumber chỉ đơn giản là một 'wrapper' hoặc một cách tốt đẹp để tổ chức các bài kiểm tra của bạn bằng cách phân loại mọi thứ thành các tính năng và các bước, trong đó các bài kiểm tra đơn vị thực tế đang trong giai đoạn bước.Is Cucumber chỉ đơn giản là một trình bao bọc xung quanh rspec để giúp tổ chức các bài kiểm tra thành các tính năng?

Nó cho phép tổ chức các bài kiểm tra của bạn về cách mọi thứ sẽ hoạt động.

Điều đó có đúng không?

Trả lời

6

Sắp xếp.

một cách để tổ chức kiểm tra, nhưng còn hơn thế nữa. Nó hoạt động như các thử nghiệm tích hợp Rails ban đầu được cho là, nhưng dễ sử dụng hơn nhiều. Chiến thắng lớn ở đây là phiên của bạn được duy trì một cách minh bạch trên toàn bộ Scenario.

Một điều khác đang xảy ra với Cucumber là bạn (được coi là) thử nghiệm từ quan điểm của trình duyệt hoặc ứng dụng khách sử dụng mã của bạn. Nếu bạn muốn, bạn có thể sử dụng các bước để xây dựng các đối tượng và thiết lập trạng thái, nhưng thông thường bạn muốn các bước của bạn đi qua các chuyển động cần thiết để đạt được trạng thái đó ngay từ đầu.

Ví dụ bạn thể làm điều này:

Given /I have a user account/ do 
    @user = Factory.create(:user) 
    # ... more user set up 
end 

Nhưng có lẽ bạn nên làm điều gì đó như thế này thay vì:

Given /I have a user account/ do 
    visit new_user_url 
    fill_in "user_login", :with => "some name" 
    fill_in "user_password", :with => "foo" 
    # ... whatever else your sign up page needs 
end 

Và tất nhiên bạn có thể vượt qua trong lập luận cho một trong những bước để cung cấp cho mã gọi của bạn một số chi tiết hơn kiểm soát hành vi của bước.

Điều tôi thường làm với các thử nghiệm của mình là như sau.

  1. Tôi sử dụng shoulda, nhưng rspec cũng được.
  2. Tôi viết các thử nghiệm xác thực phủ định của mình (tức là Truy cập bị từ chối được mong đợi) dưới dạng kiểm tra chức năng Rails.
  3. Tôi viết các bài kiểm tra xác thực tích cực của mình (tức là người dùng thực hiện những gì họ có nghĩa vụ phải làm) như các tính năng của Cucumber.

Và, tất nhiên, tôi vẫn viết bài kiểm tra đơn vị Rails cho các mô hình của tôi, thư viện, những người giúp đỡ vv

+2

Tôi không đồng ý rằng ví dụ "nên" tốt hơn ví dụ "có thể". Sự đồng thuận chung là nó hoàn toàn tốt để sử dụng các nhà máy trong các bước Given để thiết lập các điều kiện trước cho những gì thực sự được kiểm tra trong các bước. –

+0

Chắc chắn. Tôi cũng sử dụng các nhà máy ở một số bước của tôi. Có một mức độ phong phú của chủ quan liên quan. Tôi đã cố gắng chỉ ra mục đích chung của Cucumber (lái xe phần mềm của bạn như là một người dùng sẽ). Tôi đã không cố gắng quy định một cách thực sự để viết tất cả các bước. – jdl

2

Tôi thích dưa chuột vì nó mô tả hành vi là không có mô tả cách nó là thực hiện. Dưa chuột về cơ bản decouples spec (đó cũng là một thử nghiệm chấp nhận/hồi quy thử nghiệm) từ việc thực hiện. Các định nghĩa bước là bộ điều hợp giữa spec và hệ thống đang được kiểm tra, cho phép tách. Bạn cũng có thể lập luận rằng Cucumber cung cấp cho bạn một đặc tính dễ đọc hơn so với RSpec hoặc các cú pháp dựa trên Ruby khác, có thể được hiểu (thậm chí được viết) bởi một khách hàng không lập trình viên.

1

Tôi muốn nói rằng bạn hiểu là không chính xác.

Kiểm tra đơn vị và các bước Dưa chuột hoàn toàn khác nhau và phần lớn không liên quan.

Kiểm tra dưa chuột là sự kết hợp kiểm tra chấp nhận tích hợp/người dùng và như vậy được cho là độc lập với việc triển khai thực tế trong mã. Về mặt lý thuyết, bạn có thể viết lại hoàn toàn ứng dụng của mình bằng ngôn ngữ khác và kiểm tra dưa chuột của bạn và các bước có thể vẫn hữu ích nếu bạn không thay đổi hành vi ứng dụng của mình. Mặt khác, các kiểm thử đơn vị có liên quan mật thiết tới mã, kiểm tra những thứ như giá trị trả về của các cuộc gọi phương thức cụ thể, các trường hợp cạnh liên quan đến cấu trúc dữ liệu, vv .. Thay đổi phương thức và bạn phải thay đổi kiểm tra đơn vị của mình.

Có một số chương trình truyền hình tốt ở đó nói về việc sử dụng Cucumber và RSpec để xây dựng/thử nghiệm ứng dụng của bạn từ bên ngoài. Dưới đây là vài điều đó sẽ giúp bạn bắt đầu cải thiện sự hiểu biết của bạn về cách kiểm tra tích hợp và kiểm tra đơn vị có thể phù hợp với nhau:

http://blog.josephwilk.net/ruby/outside-in-development-with-cucumber-and-rspec.html

http://rubyconf2008.confreaks.com/rspec-and-cucumber.html

http://confreaks.net/videos/72-mwrc2009-bdd-with-cucumber

tôi sử dụng cá nhân riêng của dưa chuột là một bit dị giáo trong đó tôi thường chỉ sử dụng dưa chuột trên các dự án nhỏ hơn vì nó thay thế sự đơn điệu của các kịch bản chạy và chạy lại mà không đủ quan trọng để thực hiện phát triển thử nghiệm toàn bộ đơn vị trên. Điều này tuy nhiên chắc chắn không phải là sự đồng thuận của cộng đồng (ít nhất là ở nơi công cộng) về cách làm việc.

0

Dưa chuột không phải là trình bao bọc xung quanh RSpec. RSpec là một công cụ được sử dụng để điều khiển mã của bạn ở cấp độ đơn vị (một lớp tại một thời điểm) trong khi dưa leo là một công cụ để xác định các tính năng của hệ thống của bạn được tự động hóa lần lượt.

Thông số RSpec thường được viết một lần khi mã cơ sở phát triển. Chúng tôi chỉ định hành vi nhỏ tiếp theo của lớp mà chúng tôi hiện đang viết.

Tương phản với Cucumber nơi chúng tôi viết một tập hợp các kịch bản không có gì khác ngoài một ví dụ về cách hệ thống sẽ được sử dụng bởi người dùng cuối. Thông thường, hầu hết các kịch bản được viết trước khi bắt đầu phát triển và chúng phục vụ mục đích xác định chức năng nào cần chứa. Trong môi trường Agile, một tính năng được coi là hoàn thành chức năng khi tất cả các kịch bản vượt qua.

Trong các cửa hàng nhỏ hơn, nhà phát triển viết cả tính năng/kịch bản dưa chuột cũng như thông số RSpec. Trong các cửa hàng lớn hơn, các hoạt động này được chia giữa các nhà phát triển viết thông số kỹ thuật trong khi chủ sở hữu sản phẩm và người thử nghiệm viết và tự động hóa các tình huống.