2008-12-26 27 views
135

Khi nào tôi nên sử dụng thông số kỹ thuật cho ứng dụng Rails và khi Cucumber (trước đây là câu chuyện về rspec)? Tôi biết làm thế nào cả hai công việc 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 Cucumber. Quan điểm hiện tại của tôi về điều này, là nó thuận tiện để sử dụng dưa chuột khi bạn đang thực hiện ứng dụng cho khách hàng và không hiểu làm thế nào toàn bộ hệ thống là nghĩa vụ phải làm việc được nêu ra.RSpec vs Cucumber (câu chuyện RSpec)

Nhưng nếu tôi đang làm dự án của riêng mình thì sao? Trong hầu hết thời gian, tôi biết các 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ị. Những 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 câu chuyện về dưa chuột không? Nó sẽ không được thử nghiệm đôi của cùng một điều?

+11

Làm thế nào đến * mọi * * đơn * [Đóng] câu hỏi mà tôi bắt gặp được đóng "không xây dựng" bởi Bill the Lizard VÀ đồng thời câu hỏi được upvoted nhiều lần! ?! tôi đang thiếu gì? –

+3

Tôi hoàn toàn đồng ý. Tôi vẫn còn rất bối rối khi đăng câu hỏi như "phương pháp hay nhất để làm XXX". – Dean

+2

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

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, What's in a Story? làm điểm xuất phát.

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

Trong công việc Rails của chúng tôi, các câu chuyện về dưa chuột không thay thế cho các thử nghiệm đơ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à những câu chuyện có xu hướng thúc đẩy phát triển các quan điểm (chúng ta có xu hướng không viết rspec cho các quan điểm của chúng ta) và cung cấp một bài kiểm tra tốt về ứng dụng nói chung 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ể. Nếu bạn tận dụng lợi thế của webrat, việc viết Dưa chuột có thể nhanh chóng và không gây đau đớn cho rất nhiều chức năng cơ bản của bạn.

+5

Bạn đang tạo hai vấn đề riêng biệt; 1) nó là tốt để làm thử nghiệm hội nhập và chấp nhận, và 2) là dưa chuột một công cụ tốt để viết những bài kiểm tra trong. Đối với 1 - có, nó rõ ràng là một ý tưởng tốt. Đối với 2, hiếm khi nhóm phát triển viết bài kiểm tra với ngôn ngữ quá nhiều, khi bạn có thể viết các bài kiểm tra tích hợp và chấp nhận rất dễ đọc 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 - test/đơn vị hoặc minitest, cùng với capybara). Xem bài đăng mà Jack Kinsella liên kết đến bên dưới. –

8

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

Như Abie mô tả, nó gần như là một danh sách các yêu cầu mà ứng dụng phải đá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ả cách 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 điều này hoặc kết quả đó". Thông số kỹ thuật có nhiều hơn về mức 'mô hình'. Giống như, khi tôi gọi các phương thức đó với các tham số như vậy, tôi mong đợi nó trả về kết quả này. – Ariejan

26

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

Viết Tính năng Dưa chuột của bạn, sau đó trong khi phát triển các mảnh cho tính năng đó, hãy viết số kỹ thuật để hoàn thành các thành phần riêng. 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 này 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 [External-in BDD] (http://www.sarahmei.com/blog/2010/05/29/outside-in-bdd/). – rdamborsky

2

Nhưng nếu tôi đang làm dự án của riêng mình thì sao? Trong hầu hết thời gian, tôi biết các 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ị. Những 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 câu chuyện về dưa chuột vì những lý do tương tự khi 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 sẽ không nói rằng dưa chuột là cần thiết, 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 bài kiểm tra đơn vị thường chỉ được sử dụng để kiểm tra các lớp trong sự cô lập. –

+1

Phải. 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. –

6

Ngày nay bạn có thể sử dụng rspec với Capybara và Selenium Webdriver 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. Dưới đâ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 ra một thử nghiệm hội nhập cũ: spec/tích hợp/socks_rspec.rb
  3. Sau đó, tôi sẽ tạo ra một thử nghiệm tích hợp trong đó bao gồm một mô tả mới và nó chặn cho mỗi kịch bản
  4. Sau đó, tôi sẽ thực hiện chức năng tối thiểu yêu cầu để có được kiểm tra tích hợp và trong khi đi sâu hơn (vào bộ điều khiển và mô hình, vv) Tôi sẽ TDD trên bộ điều khiển và mô hình.
  5. Như bạn trở lại lên kiểm tra tích hợp của bạn phải vượt qua và bạn có thể tiếp tục thêm bước vào thử nghiệm hội nhập
  6. lặp lại

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

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

20

Việc tôi lấy ý kiến ​​là sử dụng dưa chuột trong hầu hết các trường hợp là một ý tưởng tồi do chi phí năng suất mà cú pháp của nó gây ra cho bạn. Tôi đã viết rộng rãi về chủ đề này trong Why Bother With Cucumber Tests?

+0

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ễ dàng đọc được với người ngoài. – huug

+0

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

+3

huug - Đây có thể là cách tốt để kiểm tra "người ngoài", nhưng bạn chỉ cho tôi một thành viên nhóm phi kỹ thuật muốn đọ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 nó. Ngoài ra, tôi 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 bài kiểm tra của họ. Tôi không biết, có lẽ tôi may mắn ... –