Sự khác biệt giữa RSpec và Cucumber là gì? [đóng cửa]


114

Tôi có 6 tháng kinh nghiệm phát triển Rails. Tôi đã xây dựng một ứng dụng web hiện đang được sử dụng với xác thực và ủy quyền và db postgresql.

Tôi đang chuyển sang ứng dụng Rails thứ hai của mình nhưng lần này, sau những bài học kinh nghiệm, tôi muốn phát triển nó bằng TDD, vì tôi nhận thấy nó dễ mở rộng quy mô và sửa lỗi hơn rất nhiều. Nó phát triển chậm nhưng về lâu dài thì dễ xử lý hơn nhiều.

Tôi đã nghe nói về Rspec và Cucumber nhưng hoàn toàn bị nhầm lẫn bởi chúng.

Tôi muốn biết sự khác biệt giữa RSpec và Cucumber và chúng được sử dụng để làm gì.

Nó cũng sẽ hữu ích nếu, từ quan điểm của một người mới bắt đầu (cũng là nhà phát triển duy nhất) liệu khung thử nghiệm có thực sự cần thiết hay không.


6
Để gây nhầm lẫn bạn thậm chí nhiều hơn, Minitest cũng có thể là một lựa chọn
lucas clemente

5
Capybara thực sự là một trình điều khiển có thể được sử dụng trong bất kỳ khuôn khổ thử nghiệm nào, không phải là một khuôn khổ trong và của chính nó. Watir-webdriver và Selenium là hai việc mà làm một chức năng tương tự, nhưng lái xe một trình duyệt thực và được nhiều chậm hơn nhiều so với Capybara Kệ lái xe :: Kiểm tra
DVG

37
Làm thế nào là điều này không mang tính xây dựng ???
Jason Swett

19
Câu hỏi tuyệt vời và câu trả lời tuyệt vời. Nó chỉ là những gì tôi cần. Tôi bối rối khi kết thúc câu hỏi là không mang tính xây dựng. Ai quan tâm nếu nó sẽ thu hút cuộc tranh luận? Đó là những gì cộng đồng bỏ phiếu.
dpurrington

14
Bỏ phiếu để mở lại vì tôi nghĩ rằng cơ sở để đóng câu hỏi là suy đoán. Nó chắc chắn có thể được (và đã được!) Trả lời bằng cách sử dụng "được hỗ trợ bởi sự kiện, tài liệu tham khảo hoặc chuyên môn" và bất kỳ câu hỏi nào của StackOverflow có thể "sẽ thu hút sự tranh luận, tranh luận, thăm dò ý kiến" (mà chúng ta đều biết và đã thấy). Đối với "thăm dò"? Who modus operandi của SO là ủng hộ và phản đối các câu hỏi và câu trả lời. Về cơ bản đó là một cuộc thăm dò ý kiến ​​lớn. Kết thúc điều này thật tuyệt. Nó rất hữu ích, về câu hỏi và câu trả lời về chủ đề .
Adam Cameron

Câu trả lời:


323

RSpec và Cucumber đều là các khung thử nghiệm. RSpec bao gồm Kiểm thử đơn vị truyền thống (có nghĩa là kiểm tra một lớp hoặc một phần của ứng dụng tách biệt với phần còn lại của ứng dụng. Vì vậy, mô hình của bạn thực hiện những gì mô hình của bạn phải làm, bộ điều khiển thực hiện những gì nó phải làm, v.v.).

Cả RSpec và Cucumber đều được sử dụng để Kiểm tra chấp nhận (Được gọi là ATDD, BDD, Đặc điểm kỹ thuật theo ví dụ, v.v. tùy thuộc vào người bạn yêu cầu). Đây là các Thử nghiệm tích hợp theo trường hợp kinh doanh, có nghĩa là chúng mô phỏng cách người dùng sử dụng ứng dụng và sử dụng ngăn xếp Rails đầy đủ, do đó các vấn đề về cách các phần khác nhau của ứng dụng của bạn hoạt động cùng nhau có thể được tìm thấy theo cách mà thử nghiệm đơn vị sẽ không tìm thấy.

Sự khác biệt chính giữa RSpec và Cucumber là yếu tố khả năng đọc của doanh nghiệp. Điểm hấp dẫn chính của Cucumber là thông số kỹ thuật (tính năng) tách biệt với mã thử nghiệm, vì vậy chủ sở hữu sản phẩm của bạn có thể cung cấp hoặc xem xét thông số kỹ thuật mà không cần phải tìm hiểu kỹ mã. Đây là các tệp .feature mà bạn tạo trong Cucumber. RSpec có một cơ chế tương tự, nhưng thay vào đó bạn mô tả một bước bằng khối Mô tả, Ngữ cảnh hoặc Khối chứa thông số nghiệp vụ và sau đó ngay lập tức có mã thực thi câu lệnh đó. Cách tiếp cận này dễ dàng hơn một chút đối với các nhà phát triển nhưng khó hơn một chút đối với những người không am hiểu kỹ thuật.

Sử dụng cái nào? Nếu bạn là nhà phát triển và chủ sở hữu sản phẩm duy nhất, thì tôi sẽ gắn bó với RSpec. các bước. Nếu bạn đang xây dựng điều này cho một khách hàng và họ đang thực hành liên quan đến Đặc điểm kỹ thuật, hãy sử dụng Cucumber cho Kiểm tra chấp nhận của bạn và sử dụng RSpec cho Kiểm tra đơn vị.

Chỉ để chứng minh sự khác biệt chính giữa hai:

Quả dưa chuột:

#articles.feature
Given an article exists called "Testing Demonstration"
When I visit the list of articles
Then I should see an article called "Testing Demonstration"

#article_steps.rb
Given /^an article exists called "(.+)"$/ do |title|
  FactoryGirl.create(:article, title: title)
end 
When /^I visit the list of articles$/ do
  visit articles_path
end
Then /^I should see an article called "(.+)"$/ do |title|
  page.should have_content title
end

Rspec

describe "Articles" do
  let(:article) { FactoryGirl.create(:article) }
  context "Index Page" do
    before { visit articles_path }
    it { page.should have_content article.title }
  end
end

Loạt blog này rất tuyệt khi bắt đầu với RSpec.


24
Đây là một câu trả lời xuất sắc. Cảm ơn bạn rất nhiều vì thời gian và lời khuyên của bạn. Có rất nhiều cuốn sách về đường ray mà tôi đã đọc, nhưng cho đến nay vẫn chưa tìm thấy cuốn nào tạo nên sự khác biệt và giải thích cái nào. Cảm ơn một lần nữa
banditKing

2
Tôi không thể giới thiệu câu trả lời này ít hơn cho bất kỳ ai có nhu cầu. Cảm ơn về những liệt kê chi tiết của bạn!
Ikon

3
Đây thực sự là một trong những nhất toàn diện và dễ hiểu câu trả lời trên stackoverflow (hoàn chỉnh với một ví dụ tuyệt vời!)
Sheharyar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.