RSpec vs Cucumber (เรื่อง RSpec) [ปิด]


136

เมื่อใดที่ฉันควรใช้ specs สำหรับแอปพลิเคชั่น Rails และเมื่อ Cucumber (อดีต rspec-Stories) ฉันรู้ว่าทั้งสองทำงานและใช้สเปคอย่างแน่นอน แต่มันก็ยังรู้สึกแปลก ๆ ที่จะใช้แตงกวา มุมมองปัจจุบันของฉันเกี่ยวกับเรื่องนี้คือมันสะดวกในการใช้แตงกวาเมื่อคุณใช้แอปพลิเคชันสำหรับลูกค้าและไม่เข้าใจว่าระบบทั้งหมดควรจะทำงานอย่างไร

แต่ถ้าฉันทำโครงการของตัวเองล่ะ ตลอดเวลาฉันรู้ว่าส่วนต่าง ๆ ของระบบมีการโต้ตอบอย่างไร สิ่งที่ฉันต้องทำก็คือเขียนหน่วยการทดสอบจำนวนมาก สถานการณ์ที่เป็นไปได้เมื่อฉันต้องการแตงกวาคืออะไร?

และเป็นคำถามที่สองที่สอดคล้องกัน: ฉันต้องเขียนรายละเอียดถ้าฉันเขียนเรื่องแตงกวา? จะไม่เป็นการทดสอบสองครั้งในสิ่งเดียวกันหรือไม่


12
วิธีมาทุก เดียว [ปิด] คำถามที่ผมเจอจะปิดเป็น "ไม่สร้างสรรค์" โดยบิลจิ้งจกและในเวลาเดียวกันคำถามคือ upvoted หลายครั้ง!?! ฉันหายไปอะไร
ษคานข Nazary

4
ฉันเห็นด้วยอย่างยิ่ง ฉันยังสับสนอยู่มากว่าจะโพสต์คำถามเช่น "วิธีปฏิบัติที่ดีที่สุดในการทำ XXX"
คณบดี

3
ฉันเห็นด้วยฉันเจอคำถามที่ดีพร้อมคำตอบที่เป็นประโยชน์และชาญฉลาดตลอดเวลาบน SO ที่ถูกปิดด้วยเหตุผลใดก็ตาม
รัสเซลซิลวา

ฉันพบคำถามนี้ในปี 2560 เพราะยังเกี่ยวข้องและยังเป็นคำถามที่ดีพร้อมคำตอบที่ดี นอกจากนี้ยังไม่เชิญความคิดเห็นเนื่องจากกรอบการทำงานที่เป็นปัญหาได้รับการออกแบบโดยคนส่วนใหญ่สำหรับข้อกังวลสองข้อที่แยกจากกันโดยสิ้นเชิง ... แต่คุณต้องมีความเชี่ยวชาญเล็กน้อยเพื่อที่จะรู้ว่า
Lunivore

คำตอบ:


114

หากคุณยังไม่ได้ทำคุณอาจต้องการดูบทความที่ยอดเยี่ยมของ Dan North มีอะไรในเรื่อง เป็นจุดเริ่มต้น

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

ในงาน Rails ของเราเรื่องราวของแตงกวาไม่ได้มาแทนการทดสอบ rspec ทั้งสองไปจับมือกัน ในทางปฏิบัติการทดสอบหน่วยมีแนวโน้มที่จะผลักดันการพัฒนาแบบจำลองและตัวควบคุมและเรื่องราวมีแนวโน้มที่จะผลักดันการพัฒนามุมมอง (เรามักจะไม่เขียน rspec สำหรับมุมมองของเรา) และให้การทดสอบที่ดีของโปรแกรมโดยรวม มุมมองของผู้ใช้

หากคุณกำลังทำงานคนเดียวด้านการสื่อสารอาจไม่น่าสนใจสำหรับคุณ แต่การทดสอบการรวมระบบที่คุณได้รับจากแตงกวาอาจเป็น หากคุณใช้ประโยชน์จากwebratการเขียนแตงกวาสามารถทำได้อย่างรวดเร็วและไม่เจ็บปวดสำหรับการทำงานพื้นฐานของคุณ


6
คุณกำลังพูดถึงสองประเด็นแยกกัน 1) เป็นการดีที่จะทำการทดสอบการรวมและการยอมรับและ 2) คือแตงกวาเป็นเครื่องมือที่ดีในการเขียนการทดสอบเหล่านั้นสำหรับ 1 - ใช่มันเป็นความคิดที่ดีอย่างชัดเจน สำหรับ 2 ไม่ค่อยมีประสิทธิภาพมากขึ้นสำหรับทีมพัฒนาในการเขียนการทดสอบในภาษาที่มีความอ้อมค้อมมากเมื่อคุณสามารถเขียนการทดสอบบูรณาการที่ชัดเจนและการยอมรับใน rspec และ capybara (หรือ - สวรรค์ห้ามเราอาจตรวจสอบห้องสมุดมาตรฐานของ Ruby / หน่วยหรือ minitest พร้อมกับ capybara) ดูโพสต์ที่ Jack Kinsella ลิงค์ไปด้านล่าง
เกรแฮมแอชตัน

เห็นด้วยทั้งหมดกับคุณ Abie! การบูรณาการแตงกวามีความสำคัญ!
dpapadopoulos

26

คิดว่ามันเป็นวงจร:

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


1
มีตัวอย่างที่ดีมากของวงจรคือนอกใน BDD
rdamborsky

21

สิ่งที่ฉันใช้คือว่ามันเป็นความคิดที่ดีที่จะใช้แตงกวาในสถานการณ์ส่วนใหญ่เนื่องจากค่าใช้จ่ายในการเพิ่มผลผลิตของไวยากรณ์นั้นเกิดขึ้นกับคุณ ฉันเขียนหัวข้ออย่างกว้างขวางในWhy Bother With Cucumber Tests


1
ฉันได้อ่านบทความของคุณและเป็นแฟนของแตงกวาฉันต้องบอกว่าฉันเห็นด้วยกับหลายจุดที่คุณอ้างถึงในบทความของคุณ ถึงแม้ว่าฉันจะยังคิดว่าแตงกวาเป็นวิธีที่ดีในการทำแบบทดสอบและทำให้พวกเขาอ่านง่ายต่อบุคคลภายนอก
huug

1
แจ็ค - โพสต์ที่ยอดเยี่ยม ขอบคุณมากสำหรับการเขียนคุณได้ช่วยฉันแก้ไขปัญหาด้วยตนเอง
เกรแฮมแอชตัน

3
huug - อาจเป็นวิธีที่ดีในการเปิดเผยการทดสอบกับ "คนนอก" แต่คุณแสดงให้สมาชิกในทีมที่ไม่ใช่ด้านเทคนิคที่ต้องการอ่านการทดสอบและฉันจะแสดงให้คุณเห็นทีมที่เสียงบประมาณ นอกจากนี้ฉันยังไม่ได้ทำงานกับสมาชิกที่ไม่ใช่ด้านเทคนิคของโครงการที่ต้องการเสียเวลาในการอ่านการทดสอบ ฉันไม่รู้บางทีฉันโชคดี ...
เกรแฮมแอชตัน

downvoted ฉันพบว่าการอธิบายคุณสมบัติของผู้ใช้ในแง่ของผู้ใช้มีประโยชน์กับฉันในฐานะนักพัฒนาไม่ว่าผู้ใช้จะเคยอ่านเรื่องราวของแตงกวาของฉันหรือไม่ นั่นเป็นเหตุผลที่ฉันใช้แตงกวาในทุกโครงการของฉันและกระตุ้นให้ผู้อื่นทำเช่นเดียวกัน
Marnen Laibow-Koser

8

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

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


2
เผง แตงกวาอธิบายการใช้งานแอปพลิเคชันของคุณ เช่น "ฉันคลิกที่นี่และฉันคาดหวังว่าจะได้รับสิ่งนี้หรือผลลัพธ์นั้น" รายละเอียดเพิ่มเติมเกี่ยวกับระดับ 'รุ่น' เช่นเดียวกับเมื่อฉันเรียกใช้เมธอดนั้นด้วยพารามิเตอร์ที่เช่นนั้นฉันคาดว่าจะส่งคืนผลลัพธ์นี้
Ariejan

6

ทุกวันนี้คุณสามารถใช้ rspec กับ Capybara และ Selenium Webdriver และหลีกเลี่ยงการสร้างและบำรุงรักษา parsers เรื่องราวของแตงกวาทั้งหมด นี่คือสิ่งที่ฉันอยากจะแนะนำ:

  1. เขียนเรื่องราวของคุณ
  2. ใช้ RSpec ฉันจะสร้างการทดสอบการรวมตัวอย่าง: spec / integrations / socks_rspec.rb
  3. จากนั้นฉันจะสร้างการทดสอบการรวมซึ่งรวมถึงคำอธิบายใหม่และจะบล็อกสำหรับแต่ละสถานการณ์
  4. จากนั้นฉันก็จะใช้ฟังก์ชั่นที่น้อยที่สุดเพื่อให้ได้การทดสอบการรวมระบบและในขณะที่ถอยลึกลงไป
  5. เมื่อคุณกลับมาทดสอบการรวมระบบของคุณควรผ่านและคุณสามารถเพิ่มขั้นตอนในการทดสอบการรวมระบบได้
  6. ทำซ้ำ

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

นอกจากนี้เมื่อคุณพบร่องของคุณคุณจะพบว่ามันสนุกที่สุดในการพัฒนาโดยใช้ BDD จนกว่าคุณจะไม่รู้สึกผิดถ้าคุณไม่รู้สึกว่าคุณกำลังทำมันอย่างสมบูรณ์แบบและไม่คิดมาก คุณจะทำดี!


2

แต่ถ้าฉันทำโครงการของตัวเองล่ะ ตลอดเวลาฉันรู้ว่าส่วนต่าง ๆ ของระบบมีการโต้ตอบอย่างไร สิ่งที่ฉันต้องทำก็คือเขียนหน่วยการทดสอบจำนวนมาก สถานการณ์ที่เป็นไปได้เมื่อฉันต้องการแตงกวาคืออะไร?

คุณยังต้องการแตงกวา คุณต้องใช้เอกสารว่าคุณเห็นระบบทำงานอย่างไรและคุณต้องใช้เพื่อให้แน่ใจว่าคุณไม่ได้ใช้งานไม่ได้เมื่อคุณเปลี่ยนสิ่งต่าง ๆ

คุณต้องการเรื่องราวของแตงกวาด้วยเหตุผลเดียวกับที่คุณต้องการการทดสอบหน่วย - พวกเขาแค่ทำงานในระดับที่สูงขึ้นของนามธรรม


2
ฉันจะไม่พูดว่าแตงกวาเป็นสิ่งจำเป็น แต่คุณควรมีการทดสอบแบบบูรณาการบางอย่างเนื่องจากการทดสอบแบบหน่วยมักจะใช้สำหรับการทดสอบแบบแยก
Andy Waite

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