RSpec vs Cucumber (câu chuyện RSpec) [đã đóng]


136

Khi nào tôi nên sử dụng thông số kỹ thuật cho ứng dụng Rails và khi Cucumber (câu chuyện rspec trước đây)? Tôi biết làm thế nào cả hai hoạt động và tích cực sử dụng thông số kỹ thuật, tất nhiên. Nhưng nó vẫn cảm thấy kỳ lạ khi sử dụng Dưa chuột. Quan điểm hiện tại của tôi về điều này, đó là thuận tiện khi sử dụng Cucumber khi bạn triển khai ứng dụng cho khách hàng và không hiểu toàn bộ hệ thống được cho là hoạt động như thế nào.

Nhưng nếu tôi đang làm dự án của riêng tôi thì sao? Trong hầu hết thời gian, tôi biết các bộ phận của hệ thống tương tác như thế nào. Tất cả những gì tôi cần làm là viết một loạt các bài kiểm tra đơn vị. Các tình huống có thể xảy ra khi tôi cần dưa chuột là gì?

Và, như một câu hỏi thứ hai tương ứng: tôi có phải viết thông số kỹ thuật nếu tôi viết truyện dưa chuột không? Nó sẽ không phải là thử nghiệm kép của cùng một thứ?


12
Tại sao mỗi đơn [Closed] câu hỏi mà tôi đi qua được đóng lại là "không mang tính xây dựng" bởi Bill the Lizard VÀ cùng một lúc câu hỏi được bỏ phiếu tán nhiều lần!?! tôi đang thiếu gì
Ashkan Kh. Nazary

4
Tôi hoàn toàn đồng ý. Tôi vẫn rất bối rối khi đăng những câu hỏi như "cách tốt nhất để làm XXX".
Trưởng khoa

3
Tôi đồng ý, tôi bắt gặp những câu hỏi hay với những câu trả lời sâu sắc, hữu ích mọi lúc về SO đã bị đóng vì lý do này hay lý do khác.
Russell Silva

Tôi đã tìm thấy câu hỏi này vào năm 2017 bởi vì nó vẫn có liên quan, và vẫn là một câu hỏi tuyệt vời, với những câu trả lời tuyệt vời. Nó cũng không mời ý kiến ​​vì các khung trong câu hỏi được thiết kế bởi hầu hết cùng một người cho hai mối quan tâm hoàn toàn riêng biệt ... nhưng bạn cần một chút chuyên môn để biết điều đó.
Lunivore

Câu trả lời:


114

Nếu bạn chưa có, bạn có thể muốn xem bài viết xuất sắc của Dan North, Chuyện gì đang xảy ra? như một điểm khởi đầu.

Chúng tôi có hai cách sử dụng chính cho những câu chuyện về dưa chuột. Đầu tiên, vì hình thức câu chuyện rất cụ thể, nó giúp tập trung vào việc phát biểu của các chủ sở hữu sản phẩm về các tính năng mà anh ta muốn xây dựng. Đây là cách sử dụng câu chuyện "mã thông báo cho một cuộc trò chuyện" và sẽ có giá trị cho dù chúng tôi có triển khai các câu chuyện bằng mã hay không. Thứ hai, khi quy trình hoạt động đủ tốt để chúng tôi có những câu chuyện hoàn chỉnh trước khi chúng tôi bắt đầu viết tính năng (nhiều lý tưởng mà chúng tôi phấn đấu hơn là thực tế hàng ngày), bạn có tiêu chí chấp nhận của mình được nêu rõ và bạn biết chính xác điều gì và như thế nào nhiều để xây dựng.

Trong công việc Rails của chúng tôi, những câu chuyện về dưa chuột không thay thế cho các bài kiểm tra đơn vị rspec. Hai đi tay trong tay. Trong thực tế, các bài kiểm tra đơn vị có xu hướng thúc đẩy sự phát triển của các mô hình và bộ điều khiển, và các câu chuyện có xu hướng thúc đẩy sự phát triển của các khung nhìn (chúng ta có xu hướng không viết rspec cho các khung nhìn của chúng ta) và cung cấp một bài kiểm tra tốt về toàn bộ ứng dụng từ quan điểm của người dùng.

Nếu bạn đang làm việc một mình, khía cạnh giao tiếp có thể không thú vị với bạn, nhưng thử nghiệm tích hợp bạn nhận được từ Cucumber có thể là. Nếu bạn tận dụng webrat , viết Cucumber có thể nhanh và không gây đau đớn cho nhiều chức năng cơ bản của bạn.


6
Bạn đang nhầm lẫn hai vấn đề riêng biệt; 1) có tốt không khi thực hiện kiểm thử tích hợp và chấp nhận và 2) dưa chuột là một công cụ tốt để viết các bài kiểm tra đó. Đối với 1 - vâng, rõ ràng đó là một ý tưởng tốt. Đối với 2, hiếm khi một nhóm phát triển viết bài kiểm tra bằng ngôn ngữ có nhiều sự gián tiếp hiệu quả hơn, khi bạn có thể viết các bài kiểm tra chấp nhận và tích hợp rất rõ ràng trong rspec và capybara (hoặc - trời cấm chúng tôi có thể điều tra thư viện chuẩn của Ruby - kiểm tra / đơn vị hoặc nhỏ nhất, cùng với capybara). Xem bài đăng mà Jack Kinsella liên kết đến bên dưới.
Graham Ashton

Hoàn toàn đồng ý với bạn Abie! Tích hợp dưa chuột là rất quan trọng!
dpapadopoulos

26

Hãy nghĩ về nó như một chu kỳ:

Viết tính năng Cucumber của bạn, sau đó trong khi phát triển các phần cho tính năng đó, hãy viết thông số kỹ thuật để hoàn thành các thành phần riêng lẻ. Tiếp tục hoàn thành thông số kỹ thuật cho đến khi bạn viết đủ chức năng để tính năng vượt qua, sau đó viết tính năng tiếp theo của bạn.


1
Có một ví dụ rất hay về chu trình Bên ngoài BDD .
ndamborsky

21

Tôi cho rằng đó là một ý tưởng tồi khi sử dụng Dưa chuột trong hầu hết các tình huống do chi phí trong năng suất mà cú pháp của nó gây ra cho bạn. Tôi đã viết nhiều về chủ đề trong Tại sao làm phiền với các thử nghiệm dưa chuột?


1
Tôi đã đọc bài viết của bạn và là một fan hâm mộ của dưa chuột, tôi phải nói rằng tôi đồng ý với nhiều điểm bạn trích dẫn trong bài viết của bạn. Mặc dù, tôi vẫn nghĩ dưa chuột là một cách tốt để chính thức hóa các bài kiểm tra và làm cho chúng dễ đọc đối với người ngoài.
huug

1
Jack - bài tuyệt vời. Cảm ơn rất nhiều vì đã viết nó, bạn đã cứu tôi những rắc rối khi tự làm nó.
Graham Ashton

3
huug - Đó có thể là một cách tốt để đưa ra các bài kiểm tra cho "người ngoài", nhưng bạn cho tôi thấy một thành viên nhóm phi kỹ thuật muốn đọc các bài kiểm tra và tôi sẽ cho bạn thấy một đội đang lãng phí ngân sách của mình. Ngoài ra, tôi vẫn chưa làm việc với một thành viên phi kỹ thuật của một dự án muốn lãng phí thời gian đọc các bài kiểm tra. Tôi không biết, có lẽ tôi may mắn ...
Graham Ashton

Bị hạ bệ. Tôi thấy rằng việc mô tả các tính năng của người dùng theo thuật ngữ người dùng là hữu ích đối với tôi, với tư cách là nhà phát triển, bất kể người dùng có từng đọc các câu chuyện về Cucumber của tôi hay không. Đó là lý do tại sao tôi sử dụng Cucumber trong tất cả các dự án của mình và khuyến khích người khác làm tương tự.
Marnen Laibow-Koser

8

Một câu chuyện Cucumber là một mô tả về vấn đề tổng thể mà ứng dụng của bạn đang giải quyết, thay vì nếu các bit riêng lẻ của mã hoạt động (tức là kiểm tra đơn vị).

Như Abie mô tả, đây gần như là một danh sách các yêu cầu mà ứng dụng cần đáp ứng và rất hữu ích để liên lạc với khách hàng của bạn, cũng như có thể kiểm tra trực tiếp.


2
Chính xác. Dưa chuột mô tả việc sử dụng ứng dụng của bạn. Ví dụ: "Tôi bấm vào đây và tôi mong đợi để có được kết quả này hoặc kết quả đó". Thông số kỹ thuật nhiều hơn ở cấp độ 'mô hình'. Giống như, khi tôi gọi các phương thức đó với các tham số tương tự, tôi hy vọng nó sẽ trả về kết quả này.
Ariejan

6

Ngày nay, bạn có thể sử dụng rspec với Capybara và Selenium WebSearch và tránh phải xây dựng và duy trì tất cả các trình phân tích cú pháp câu chuyện Cucumber. Đây là những gì tôi muốn giới thiệu:

  1. Viết ra câu chuyện của bạn
  2. Sử dụng RSpec, tôi sẽ tạo một bài kiểm tra tích hợp ex: spec / integ integration / vớ_rspec.rb
  3. Sau đó, tôi sẽ tạo một thử nghiệm tích hợp bao gồm một mô tả mới và nó chặn cho từng kịch bản
  4. Sau đó, tôi sẽ thực hiện các chức năng tối thiểu cần có để kiểm tra tích hợp và trong khi quay lại sâu hơn (vào các bộ điều khiển và mô hình, v.v.) Tôi sẽ TDD trên các bộ điều khiển và mô hình.
  5. Khi bạn quay lại kiểm tra tích hợp, bạn sẽ vượt qua và bạn có thể tiếp tục thêm các bước vào kiểm tra tích hợp
  6. nói lại

Tuy nhiên, một điều cần lưu ý là bộ kiểm tra và kiểm tra tích hợp có sự trùng lặp có thể không cần thiết nên bạn phải sử dụng phán đoán tốt nhất của mình để không lãng phí thời gian.

Ngoài ra, một khi bạn tìm thấy rãnh của mình, bạn sẽ thấy thú vị nhất khi phát triển bằng cách sử dụng BDD, cho đến lúc đó đừng cảm thấy tội lỗi nếu bạn không cảm thấy mình đang làm điều đó hoàn hảo và đừng nghĩ quá nhiều. Bạn sẽ làm tốt!


2

Nhưng nếu tôi đang làm dự án của riêng tôi thì sao? Trong hầu hết thời gian, tôi biết các bộ phận của hệ thống tương tác như thế nào. Tất cả những gì tôi cần làm là viết một loạt các bài kiểm tra đơn vị. Các tình huống có thể xảy ra khi tôi cần dưa chuột là gì?

Bạn vẫn cần dưa chuột. Bạn cần nó để ghi lại cách bạn thấy hệ thống hoạt động và bạn cần nó để đảm bảo rằng bạn không bị hỏng chức năng khi bạn thay đổi mọi thứ.

Nói cách khác, bạn cần những câu chuyện về dưa chuột vì những lý do tương tự như bạn cần kiểm tra đơn vị - chúng chỉ hoạt động ở mức độ trừu tượng cao hơn.


2
Tôi không nói rằng Cucumber là thiết yếu, nhưng bạn chắc chắn nên có một số loại thử nghiệm tích hợp, vì các thử nghiệm đơn vị thường chỉ được sử dụng cho các lớp thử nghiệm riêng rẽ.
Andy Chờ đợi

1
Đúng. Và trong hầu hết các trường hợp, Cucumber là cách tốt nhất để viết các bài kiểm tra tích hợp.
Marnen Laibow-Koser
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.