อะไรคือความแตกต่างระหว่าง BDD frameworks สำหรับ Java? [ปิด]


121

อะไรคือข้อดีข้อเสียของแต่ละเฟรมเวิร์กBehavior Driven Development (BDD) สำหรับ Java

ฉันพบบางส่วนที่นี่เช่น

มันสมเหตุสมผลหรือไม่ที่จะใช้เฟรมเวิร์ก BDD หากฉันใช้ไลบรารีจำลอง (เช่นMockito ) อยู่แล้ว


โปรดกำหนด BDD หรือลิงก์ไปยังคำจำกัดความ
— Jason S

4
BDD = พฤติกรรมขับเคลื่อนการพัฒนา
— Vinnie

4
เศร้าเกินไปที่ไม่ได้รับคำตอบเพิ่มเติม!
— Pablo Fernandez

สำหรับ Cuke4Duke อ่าน cucumber-jvm ในเงินรางวัลของฉัน ฉันยังมีเวลา 22 ชั่วโมงในการมอบรางวัลให้ ...
— Sam Hasler

คำตอบ:


99

ฉันเพิ่งเสร็จสิ้นการเปรียบเทียบ BDD framework สามตัวสำหรับ Java เห็นได้ชัดว่าการค้นพบของฉันมีวันที่ใช้งานค่อนข้างสั้น

Concordion

  • มีความยืดหยุ่นมาก
  • เอาท์พุทรายงานสวยมาก
  • กรอบปลั๊กอินที่ดี
  • เอกสารไม่ดี ฉันต้องอ่านแหล่งที่มาเพื่อหาข้อมูล (โชคดีที่คุณภาพดีมาก)
  • การแข่งขันดูเหมือนจะจบลงอย่างแน่นหนาควบคู่ไปกับ html

EasyB

  • เส้นโค้งการเรียนรู้ที่ตื้นมาก (แม้แต่สำหรับนักพัฒนาที่ไม่ใช่ Groovy)
  • การรวม DBUnit ที่ทรงพลังอย่างยิ่ง
  • เห็นได้ชัดว่าไม่มีการรองรับพารามิเตอร์ (นำไปสู่เรื่องราวที่คลุมเครือมากหรือการทำซ้ำระหว่างข้อความและรหัส (แก้ไข: มีอยู่จริง แต่เอกสารประกอบถูกซ่อนไว้เป็นอย่างดี)
  • เรื่องราวและรหัสเชื่อมโยงกันอย่างแน่นหนา (ไฟล์เดียวกัน)
  • เอาต์พุตรายงานพื้นฐานมาก
  • ไม่สามารถรับปลั๊กอิน IntelliJ ในการทำงาน
  • ชุมชนที่ไม่ได้ใช้งาน (ปลั๊กอิน Maven ดูเหมือนจะใช้งานไม่ได้เป็นเวลาสามเดือน - มีตัวอย่างโค้ดไม่มากนัก)

JBehave

  • มีประสิทธิภาพและยืดหยุ่นสูงมาก (เช่นการลดปริมาณหม้อไอน้ำผ่านองค์ประกอบของเรื่องราวตามข้อกำหนดเบื้องต้น)
  • เอกสารและตัวอย่างที่ครอบคลุม (ถ้าแยกส่วน)
  • การสนับสนุนอย่างกว้างขวาง (หากมีมากเกินไป) สำหรับกรอบงานและสภาพแวดล้อมที่แตกต่างกัน
  • แยกไฟล์เรื่องราวออกจากโค้ดได้ดีเยี่ยม
  • ดูเหมือนจะมีชุมชนที่ใช้งานได้ดีและมีตัวอย่างและการสนทนาบนเว็บอีกมากมาย
  • เส้นโค้งการเรียนรู้ที่ค่อนข้างสูงชัน (ใช้เวลานานกว่าฉัน 3-4 เท่าในการคิดออก Concordion / EasyB)

ฉันไม่มีโอกาสได้ลอง Cuke4Duke ของ JDave อย่างที่ฉันชอบ แต่อาจจะผลักดันให้ JBehave ในเวลานี้


4
+1: โดยคำตอบที่ดีที่สุดที่นี่ การเพิ่มลิงค์
— haylem

35

"ข้อดีข้อเสีย" อาจแตกต่างกันไปสำหรับแต่ละคน ฉันมักจะดูที่

  • กิจกรรมการพัฒนาเช่นมีแนวโน้มจะออกใหม่หรือเป็นรุ่นล่าสุดที่มีอายุ 2 ปี
  • วุฒิภาวะเช่นมีมานานแค่ไหนมีแบบฝึกหัดและอาจมีหนังสือด้วย (ฉันไม่ได้อ่านหนังสือเหล่านี้มันเป็นเพียงสัญญาณของการยอมรับ)
  • การสนับสนุนเครื่องมือเช่นมีปลั๊กอิน Eclipse, Ant support ฯลฯ
  • ขนาดของการอ้างอิงฉันไม่ชอบกรอบที่มาพร้อมกับทุกอย่างของตัวเอง เช่นฉันต้องการเลือกกรอบการล้อเลียนของฉันเอง
  • ประเภทของใบอนุญาตนี่เป็นสิ่งสำคัญสำหรับฉันเนื่องจากเงื่อนไขทางกฎหมายใน บริษัท ที่ฉันทำงาน
  • ความเข้ากันได้กับเครื่องมือที่เกี่ยวข้องเช่นใช้ภาษา Gherkin หรือไม่

และจากกรอบบางอย่างฉันได้ดู

  • สัญชาตญาณ ไม่ดี : กิจกรรมล่าสุดเมื่อเดือนมีนาคม 2010ดี : ใบอนุญาต ASF
  • JDave bad : มาพร้อมกับ matchers และ mocks, good : กิจกรรมล่าสุด ม.ค. 2011, ใบอนุญาต ASF
  • easyb bad : กิจกรรมล่าสุด ต.ค. 2010ไม่แน่ใจ : ใช้ Groovy นี่อาจจะใช้ได้ แต่จะเป็นปัญหาสำหรับการนำไปใช้ในกรณีของฉัน
  • beanpec ไม่ดี : มีเพียงเวอร์ชันเดียวในปี 2550 เท่านั้นที่ตายไปแล้ว
  • bdoc ไม่ดี : กิจกรรมล่าสุดเมื่อเดือนมกราคม 2010ไม่แน่ใจ : ดูเหมือนว่าจะไปอีกทางหนึ่งโดยสร้างรายงานจากโค้ด
  • สป็อค ไม่ดี : อาจจะรุนแรงไปหน่อยนี่เป็นกรอบการทดสอบที่สมบูรณ์ไม่ใช่เฉพาะ BDD เท่านั้นที่ดี : ใช้งานได้ดีเยี่ยมมาก
  • jbehave "แม่" ของ BDD ทั้งหมดใน Javaไม่ดี : มีประสิทธิภาพมาก = ซับซ้อนสิทธิ์การใช้งานที่เข้ากันไม่ได้ (สำหรับฉัน) มาพร้อมกับไลบรารีทดสอบเกือบทุกตัวและอื่น ๆ อีกมากมายดี : ใช้ RSpec และเข้ากันได้ปลั๊กอิน eclipse การรวม maven ชุมชนที่กระตือรือร้นมาก
  • ginkgo4jซึ่งเป็นเฟรมเวิร์ก BDD สำหรับ Java ซึ่งใช้ RSpec ของ Ruby แต่ใช้ Java lambda (แทนคำอธิบายประกอบ) เพื่อให้คุณสร้างการทดสอบที่มีบริบทสูงและอ่านได้ง่าย ง่าย ทรงพลังมาก. ใบอนุญาตโอเพนซอร์ส Apache 2

เกี่ยวกับการล้อเลียน: คุณต้องมีกรอบการเยาะเย้ยเช่นกัน เฟรมเวิร์ก BDD ช่วยคุณในการเขียนข้อกำหนด แต่การทดสอบบางอย่างจะต้องมีการจำลองหรือต้นขั้วโดยเฉพาะ เมื่อคุณออกแบบจากบนลงล่าง (จากภาพรวมไปจนถึงรายละเอียด)


jbehave เป็น 3 ข้อ BSD ได้รับใบอนุญาต: jbehave.org/license.html ฉันไม่แน่ใจว่าทำไมทุกคนถึงมีปัญหากับเรื่องนี้?
— Ramon

รามยอนมันเกี่ยวกับการพึ่งพา มีจำนวนมาก บางทีทั้งหมดอาจเป็น Apache หรือ BSD ฉันไม่ได้กังวลที่จะตรวจสอบ
— Peter Kofler

ดีรายการปรับปรุงของ BDD กรอบbehaviour-driven.org/Implementations
— พอล Verest

คุณสามารถเพิ่มJGivenในรายการนั้นได้
— ม.ค. Schaefer

20

BDD framework ที่ดีที่สุดที่จะใช้กับ Java คืออะไร? ทำไม? แต่ละกรอบมีข้อดีข้อเสียอย่างไร

นี่คือลิงค์ที่น่าสนใจเกี่ยวกับConcordion vs. Cucumber และ Java based Acceptance Testing

ฉันเจอสองสามตัวที่นี่ แต่ไม่แน่ใจว่าจะเลือกอันไหนดี

จริงๆดูที่กล่าวไว้ข้างต้น

มันสมเหตุสมผลหรือไม่ที่จะใช้เฟรมเวิร์ก BDD หากฉันใช้ไลบรารีจำลอง (เช่น Mockito) อยู่แล้ว

คำตอบสั้น ๆ : ใช่แน่นอน อันที่จริงการทดสอบการยอมรับโดยใช้กรอบ BDD และการทดสอบหน่วยแยกโดยใช้วัตถุจำลองนั้นแตกต่างกันมากจนฉันไม่ค่อยได้รับคำถาม การทดสอบการยอมรับคือการทดสอบกล่องดำการทดสอบใช้เพื่อตรวจสอบว่าคุณลักษณะทางธุรกิจใช้งานได้จริงและเขียนโดยนักวิเคราะห์ธุรกิจ การทดสอบหน่วยแยกโดยใช้ล้อเลียนคือการทดสอบกล่องสีขาวการทดสอบใช้เพื่อตรวจสอบว่าหน่วยทำงานและเขียนโดยนักพัฒนา ทั้งสองอย่างมีประโยชน์ แต่มีวัตถุประสงค์ที่แตกต่างกันโดยสิ้นเชิง กล่าวอีกนัยหนึ่งการใช้ Mockito ไม่ได้แทนที่กรอบ BDD เลยและสิ่งที่ผกผันก็เป็นจริงเช่นกัน


สิ่งที่คุณพูดไม่ผิด แต่ไม่ได้หมายความว่าคุณไม่สามารถเขียนแบบทดสอบหน่วยของคุณในรูปแบบที่เป็นมิตรกับ BDD ได้ ไม่ใช่คุณสมบัติตามตัวอย่าง แต่ก็ไม่ใช่คุณสมบัติที่ไร้ค่า docs.mockito.googlecode.com/hg/org/mockito/BDDMockito.html
— cwash

7

เดิมทีฉันทำ BDD ด้วย jUnit ธรรมดา แต่เมื่อเร็ว ๆ นี้ฉันได้ดูJDaveเพราะมันเกือบ 1: 1 สำหรับสิ่งที่ฉันทำกับ jUnit นอกจากนี้ยังทำงานบน jUnit ดังนั้นจึงทำงานบน Eclipse อยู่แล้วและยังง่ายต่อการกำหนดค่าให้ทำงานกับระบบการรวมต่อเนื่องเช่น Hudson ไม่สามารถเปรียบเทียบกับคนอื่น ๆ ได้เลย แต่ประสบการณ์ของฉันกับ JDave นั้นดีมาก

โอ้และไม่เคยเป็นความคิดที่โง่เลยที่จะใช้ล้อเลียน! พวกเขาไม่ได้เชื่อมโยงกับ TDD / BDD โดยเฉพาะจุดประสงค์คือเพื่อลดภาระในการทดสอบโดยทั่วไป


6

ว้าวเห็นประเด็นร้อนคำตอบดีๆเยอะมาก ...

นอกจากนี้ฉันเพิ่งค้นพบ BDD และพบว่าแนวคิดนี้น่าสนใจ เฮ้มันบังคับให้เขียนทั้งการทดสอบ ... และข้อกำหนด! น่าแปลกใจที่อาจดูเหมือนว่าโครงการหลังอาจหายไปในบางโครงการ ... หรือขาดความแม่นยำที่ BDD บังคับให้แนะนำ

พฤติกรรมการขับเคลื่อนการพัฒนาบทความสรุปแนวคิดและการเชื่อมโยงไปยังบทความที่ดีบางอย่าง (เช่นที่เขียนโดยแอนดรูโกลเวอร์) ยิ่งไปกว่านั้นในหัวข้อของเธรดนี้จะให้รายชื่อเฟรมเวิร์ก BDD ที่ค่อนข้างครอบคลุม (ฉันคิดว่า) ซึ่งเป็นจำนวนที่ดีสำหรับ Java
มันไม่ได้ช่วยแก้ปัญหาในการเลือก framework แต่อย่างน้อยมันก็ช่วยให้การค้นหาง่ายขึ้น ...

เนื่องจาก BDD ต้องอาศัยความสามารถในการอ่านโค้ดทดสอบเป็นอย่างมากฉันจึงคิดว่าเกณฑ์ที่ดีในการเลือกคือการดูทัวร์ / บทช่วยสอนฉบับย่อและดูว่าอันไหนเหมาะกับสไตล์ของคุณมากขึ้น เกณฑ์อื่น ๆ อาจเป็นเครื่องมือที่ใช้ประโยชน์จากเฟรมเวิร์กที่คุณคุ้นเคย (การทดสอบหน่วยการเยาะเย้ย) การใช้งานกับ IDE และอื่น ๆ


4

ฉันลองใช้Cucumber-JVM (ก่อนหน้านี้พัฒนาเป็น Cuke4Duke) ใช้ Gherkin DSL สำหรับข้อกำหนดจัดเก็บเป็นข้อความธรรมดา

Cucumber-JVM ตัวอย่างใน Eclipse 4.2

สามารถรันเป็นการทดสอบ JUnit ดังนั้นปัญหาเดียวในการเริ่มต้นใช้งานคือทำให้นักธุรกิจหรือผู้จัดการผลิตภัณฑ์อ่าน / เขียนคุณสมบัติใน Sources

ผล


3

ทีมของฉันใช้JBehaveมาระยะหนึ่งแล้ว ใช้ไฟล์ข้อความธรรมดาเพื่อจัดเก็บข้อมูลจำเพาะ ทุกขั้นตอน (ระบุเมื่อนั้น) จะถูกดำเนินการโดยวิธีการบางอย่างซึ่งสามารถดึงพารามิเตอร์ออกจากขั้นตอนได้ สถานการณ์สามารถเยื้องและจัดรูปแบบได้ดีซึ่งช่วยได้มากหากลูกค้าต้องการตรวจสอบ

มีปัญหาบางอย่างเช่นกัน เราได้เปลี่ยนไปใช้ Java 6 บางครั้งขั้นตอนสถานการณ์บางอย่างจะถูกละเว้นระหว่างการดำเนินการ อาจทำให้เกิดปัญหามากมายในการหาจุดบกพร่อง


2
@ Boris ปัญหาของคุณเป็นไปได้หรือไม่ว่าขั้นตอนที่รอดำเนินการนับเป็นผ่าน (พฤติกรรมเริ่มต้น) แทนที่จะล้มเหลว หากนั่นคือปัญหาของคุณคุณสามารถกำหนดค่า PendingErrorStrategy: jarvana.com/jarvana/view/org/jbehave/jbehave-core/2.2.1/…
— JeffH

3

ทีมของฉันใช้ JBehave อย่างประสบความสำเร็จ - เราย้ายไปใช้งานหลังจากใช้ EasyB และพบว่าไฟล์สถานการณ์ข้อความธรรมดาจัดการได้ง่ายขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.