Sự khác biệt giữa các khung công tác BDD cho Java là gì? [đóng cửa]


121

Ưu và nhược điểm của mỗi khung Phát triển Theo hướng Hành vi (BDD) cho Java là gì?

Ví dụ, tôi đã tìm thấy một số trong số chúng ở đây .

Sử dụng khung BDD có hợp lý không nếu tôi đã sử dụng thư viện chế nhạo (ví dụ: Mockito )?


vui lòng xác định BDD hoặc liên kết đến định nghĩa
Jason S

4
BDD = Phát triển theo hướng hành vi
Vinnie

4
Quá buồn vì điều này không có thêm câu trả lời!
Pablo Fernandez

cho Cuke4Duke đọc dưa chuột-jvm trong tiền thưởng của tôi. Tôi vẫn còn có 22 giờ để giải bounty ...
Sam Hasler

Câu trả lời:


99

Tôi vừa hoàn thành việc so sánh ba khung công tác BDD cho Java. Rõ ràng là những phát hiện của tôi có thời hạn sử dụng khá ngắn.

Concordion

  • Rất linh hoạt
  • Kết quả báo cáo rất đẹp
  • Khung plugin đẹp
  • Tài liệu kém. Tôi đã phải đọc nguồn để tìm ra nó (may mắn là chất lượng của nó cực kỳ tốt).
  • Các đồ đạc có vẻ như kết hợp chặt chẽ với html.

EasyB

  • Đường cong học tập rất nông (ngay cả đối với Nhà phát triển không phải Groovy)
  • Tích hợp DBUnit cực kỳ mạnh mẽ
  • Rõ ràng là không có hỗ trợ cho các tham số (dẫn đến những câu chuyện rất mơ hồ hoặc sự trùng lặp giữa văn bản và mã (chỉnh sửa: thực sự là có nhưng tài liệu về nó đã được giấu rất kỹ).)
  • Câu chuyện và Mã được kết hợp rất chặt chẽ (cùng một tệp)
  • Kết quả báo cáo rất cơ bản
  • Không thể làm cho plugin IntelliJ hoạt động
  • Cộng đồng không hoạt động (plugin Maven dường như đã bị hỏng trong ba tháng - không có nhiều ví dụ mã để rút ra)

JBehave

  • Cực kỳ mạnh mẽ và linh hoạt (ví dụ: giảm tấm lò hơi thông qua việc bố trí các tầng như điều kiện tiên quyết)
  • Tài liệu và ví dụ mở rộng (nếu bị phân mảnh)
  • Hỗ trợ mở rộng (nếu áp đảo) cho các khuôn khổ và môi trường khác nhau
  • Tách các tập tin câu chuyện khỏi mã một cách xuất sắc
  • Có vẻ như có một cộng đồng khá tích cực và nhiều ví dụ và thảo luận về nó trên web.
  • Đường cong học tập khá khó khăn (tôi mất thời gian dài gấp 3-4 lần để tìm ra so với Concordion / EasyB)

Tôi đã không có cơ hội để thử Cuke4Duke của JDave như tôi muốn, nhưng có lẽ sẽ thúc đẩy JBehave vào thời điểm này.


4
+1: cho đến nay câu trả lời tốt nhất ở đây. Thêm liên kết.
haylem

35

"ưu và nhược điểm" có thể là những điều khác nhau đối với những người khác nhau. Tôi thường xem qua

  • hoạt động phát triển , ví dụ: có khả năng là bản phát hành mới hoặc là bản phát hành cuối cùng đã 2 năm tuổi.
  • sự trưởng thành , ví dụ như nó đã tồn tại được bao lâu, có hướng dẫn và thậm chí có thể có sách. (Tôi không đọc những cuốn sách này, nó chỉ là một dấu hiệu của sự nhận nuôi.)
  • hỗ trợ công cụ , ví dụ: có một plugin Eclipse, hỗ trợ Ant, v.v.
  • kích thước của các phụ thuộc , tôi không thích các khuôn khổ đi kèm với mọi thứ của riêng chúng. ví dụ: tôi muốn tự mình chọn khuôn khổ chế nhạo của mình.
  • loại giấy phép , điều này quan trọng đối với tôi vì các điều khoản pháp lý trong công ty tôi làm việc.
  • khả năng tương thích với các công cụ liên quan , ví dụ như nó có sử dụng ngôn ngữ Gherkin hay không.

Và từ một số khuôn khổ, tôi đã xem xét

  • Bản năng xấu : hoạt động cuối cùng vào tháng 3 năm 2010, tốt : giấy phép ASF
  • JDave xấu : đi kèm với trình so khớp và mô phỏng, tốt : hoạt động cuối cùng vào tháng 1 năm 2011, giấy phép ASF
  • easyb bad : hoạt động cuối cùng vào tháng 10 năm 2010, không chắc chắn : nó sử dụng Groovy. Điều này có thể ổn, nhưng sẽ là một vấn đề cho việc áp dụng trong trường hợp của tôi.
  • beanpec bad : chỉ có một phiên bản trong năm 2007, cái này đã chết
  • bdoc bad : hoạt động cuối cùng vào tháng 1 năm 2010, không chắc chắn : có vẻ như đi theo hướng khác, tạo báo cáo từ mã.
  • spock bad : có thể hơi cực, đây là một framework test hoàn chỉnh, không chỉ BDD, tốt : rất tích cực, rất tuyệt.
  • jbehave , "mẹ" của tất cả BDD trong Java, tệ : rất mạnh = giấy phép phức tạp, không tương thích (đối với tôi), đi kèm với hầu hết mọi thư viện thử nghiệm và hơn thế nữa, tốt : dựa trên RSpec và do đó tương thích, các plugin eclipse, tích hợp maven , cộng đồng rất tích cực
  • ginkgo4j , một khung công tác BDD cho Java cũng dựa trên RSpec của Ruby nhưng sử dụng Java lambda (thay vì chú thích) để cho phép bạn tạo các bài kiểm tra có ngữ cảnh cao, dễ đọc. Đơn giản. Rất mạnh. Giấy phép Apache 2 nguồn mở.

Liên quan đến chế độ giả: Bạn chắc chắn cũng cần một khung chế tạo. Các khung công tác BDD chỉ giúp bạn viết các thông số kỹ thuật, nhưng một số bài kiểm tra sẽ cần các bản mô phỏng hoặc sơ khai, đặc biệt. khi bạn thiết kế từ trên xuống (từ tổng quan đến chi tiết).


jbehave là BSD 3 điều khoản được cấp phép: jbehave.org/license.html . Tôi không chắc tại sao mọi người lại đặt vấn đề với điều đó?
Ramon

Ramon, đó là về sự phụ thuộc. Có rất nhiều người trong số họ. Có lẽ tất cả chúng đều là Apache hoặc BSD, tôi đã không buồn kiểm tra.
Peter Kofler

Danh sách cập nhật tốt về các khung công tác BDD hành vi của bạn
Paul Verest

Bạn có thể thêm JGiven vào danh sách đó.
Jan Schaefer

20

Khung BDD tốt nhất để sử dụng với Java là gì? Tại sao? Ưu và nhược điểm của từng khuôn khổ là gì?

Đây là một liên kết thú vị về Concordion so với Cucumber và Kiểm tra chấp nhận dựa trên Java

Tôi đã tìm thấy một vài trong số chúng ở đây, nhưng tôi không chắc nên chọn cái nào.

Thực sự, hãy nhìn vào cái được đề cập ở trên.

Sử dụng khung BDD có hợp lý không nếu tôi đã sử dụng thư viện chế nhạo (ví dụ: Mockito)?

Câu trả lời ngắn gọn: có, chắc chắn. Trên thực tế, thử nghiệm chấp nhận bằng cách sử dụng khung BDD và thử nghiệm đơn vị riêng biệt bằng cách sử dụng các đối tượng giả khác nhau đến mức tôi không thực sự hiểu câu hỏi. Kiểm thử chấp nhận là kiểm tra hộp đen, kiểm tra được sử dụng để xác minh rằng một tính năng kinh doanh đang hoạt động và được viết bởi nhà phân tích kinh doanh một cách lý tưởng. Kiểm thử đơn vị riêng biệt bằng cách sử dụng mocks là kiểm thử hộp trắng, kiểm tra được sử dụng để xác minh rằng một đơn vị đang hoạt động và được viết bởi các nhà phát triển. Cả hai đều hữu ích nhưng chúng có những mục đích hoàn toàn khác nhau. Nói cách khác, việc sử dụng Mockito hoàn toàn không thay thế khung BDD và điều ngược lại cũng đúng.


Những gì bạn nói không sai, nhưng điều đó không có nghĩa là bạn không thể viết các bài kiểm tra đơn vị của mình theo phong cách thân thiện với BDD hơn. Không phải đặc tả bằng ví dụ, nhưng cũng không phải là một tính năng vô giá trị. docs.mockito.googlecode.com/hg/org/mockito/BDDMockito.html
cwash

7

Ban đầu tôi đã thực hiện BDD của mình với jUnit đơn giản nhưng gần đây tôi đã xem xét JDave vì nó gần như là 1: 1 với những gì tôi đang làm với jUnit. Nó cũng chạy trên jUnit nên đã hoạt động trên Eclipse và cũng dễ dàng cấu hình để hoạt động trên các hệ thống tích hợp liên tục như Hudson. Không thể thực sự so sánh nó với những người khác nhưng trải nghiệm của tôi với JDave cho đến nay rất tốt.

Ồ và không bao giờ là một ý tưởng ngu ngốc khi sử dụng chế độ giả! Chúng không bị ràng buộc cụ thể với TDD / BDD, mục đích của chúng là giảm bớt gánh nặng kiểm tra nói chung.


6

Wow, mình thấy topic đang hot, nhiều câu trả lời hay ...

Trớ trêu sang một bên, gần đây tôi đã khám phá ra BDD và thấy khái niệm này thật thú vị. Này, nó buộc phải viết cả hai bài kiểm tra ... và thông số kỹ thuật! Có vẻ như đáng ngạc nhiên, cái sau cũng có thể bị thiếu trong một số dự án ... Hoặc chỉ thiếu độ chính xác mà BDD buộc phải giới thiệu.

Các hành vi Driven Development bài viết tóm tắt các khái niệm và các liên kết đến một số điều tốt (giống như được viết bởi Andrew Glover). Hơn nữa, về chủ đề của luồng này, nó đưa ra một danh sách khá toàn diện (tôi cho là vậy) về các khung công tác BDD, một số lượng lớn trong số đó dành cho Java.
Nó không giải quyết được vấn đề về việc chọn khung nhưng ít nhất nó sẽ dễ dàng tìm kiếm ...

Vì BDD chủ yếu dựa vào khả năng đọc của mã thử nghiệm, tôi cho rằng một tiêu chí lựa chọn tốt là xem các tham quan / hướng dẫn nhanh và xem cái nào có vẻ phù hợp với phong cách của bạn hơn. Các tiêu chí khác có thể là thực tế là một công cụ đòn bẩy khung mà bạn đã quen thuộc (kiểm tra đơn vị, mô phỏng), cách sử dụng với IDE, v.v.


4

Tôi đã thử Cucumber-JVM (trước đây được phát triển thành Cuke4Duke). Nó sử dụng Gherkin DSL cho đặc điểm kỹ thuật, được lưu trữ dưới dạng văn bản thuần túy.

Ví dụ Cucumber-JVM trong Eclipse 4.2

Nó có thể được chạy như một thử nghiệm JUnit. Vì vậy, vấn đề duy nhất để bắt đầu sử dụng nó là làm cho người kinh doanh hoặc Giám đốc sản phẩm đọc / ghi .features trong Nguồn.

Các kết quả


3

Nhóm của tôi đã sử dụng JBehave được một thời gian. Nó sử dụng các tệp văn bản thuần túy để lưu trữ các thông số kỹ thuật. Mỗi bước (Cho, Khi, Thì) sau đó được thực hiện bằng một phương thức nhất định có thể trích xuất các tham số từ bước. Các kịch bản có thể được thụt lề và được định dạng tốt, điều này sẽ giúp ích rất nhiều nếu khách hàng muốn xác minh chúng.

Có một số vấn đề, quá. Chúng tôi đã chuyển sang Java 6. Đôi khi một số bước kịch bản bị bỏ qua trong quá trình thực thi. Nó có thể gây ra nhiều khó khăn trong việc tìm ra lỗi ở đâu.


2
@Boris Có thể vấn đề của bạn là các bước PENDING được tính là đạt (hành vi mặc định) thay vì không thành công? Nếu đó là vấn đề của bạn, bạn có thể cấu hình các PendingErrorStrategy: jarvana.com/jarvana/view/org/jbehave/jbehave-core/2.2.1/...
JeffH

3

Nhóm của tôi đã sử dụng JBehave thành công - chúng tôi đã chuyển sang nó sau khi sử dụng EasyB và nhận thấy các tệp kịch bản văn bản thuần túy dễ xử lý hơn.

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.