ฝึก BDD กับ python [ปิด]


133

เฟรมเวิร์กและเครื่องมือขั้นสูงสุดใดที่มีสำหรับ python สำหรับฝึก Behavior Driven Development โดยเฉพาะอย่างยิ่งการหาเครื่องมือที่คล้ายกันเช่น rspec และ mocha สำหรับทับทิมจะดีมาก


1
Flowp "อนุญาตให้เขียนการทดสอบในรูปแบบ RSpec BDD ด้วยเวทมนตร์ขั้นต่ำ"
Carl G

7
เฉพาะใน SO เท่านั้นที่ให้ข้อมูลสูงเท่ากับ "ไม่สร้างสรรค์"
jeremyjjbrown

คำตอบ:


38

Ian Bickingแนะนำให้ใช้หลักปฏิบัติสำหรับการออกแบบที่ขับเคลื่อนด้วยพฤติกรรม:

โดยส่วนตัวฉันมักจะใช้จมูกและvoidspace ล้อเลียนในรูปแบบการออกแบบที่ขับเคลื่อนด้วยพฤติกรรม โดยเฉพาะปลั๊กอินสำหรับจมูกนั้นยอดเยี่ยมสำหรับ BDD


7
Andrew Bennetts เพิ่งเขียนโพสต์สองสามโพสต์เกี่ยวกับสาเหตุที่เขาคิดว่าแพทย์ถูกทารุณกรรม andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-pro issues
ddaa

4
ฉันคิดว่าหลักคำสอนนั้นสอดคล้องกับปรัชญาของ BDD มากกว่าเมื่อคุณปฏิบัติตามที่ตั้งใจไว้: คุณเริ่มเขียนเกี่ยวกับซอฟต์แวร์จากนั้นจึงสลับกับตัวอย่างที่เป็นแบบทดสอบด้วย มีการอธิบายว่า "การพัฒนาที่ขับเคลื่อนด้วยเอกสาร" เช่นกันประเด็นคือการมุ่งเน้นไปที่ฟังก์ชันการทำงานที่อธิบายได้ภายนอกไม่ใช่หน่วยงานภายใน ฉันคิดว่าประเพณี xUnit นั้นแย่มากที่ทำแบบนั้น
ianb

48

ผักกาดหอมหมายถึงเครื่องมือคล้ายแตงกวาสำหรับงูหลาม: http://lettuce.it/

คุณสามารถหาแหล่งที่มาได้ที่ github.com/gabrielfalcao/lettuce


ผู้ใช้ windows ที่พิจารณาผักกาดหอมควรทราบในขณะที่เขียนการสนับสนุนระบบปฏิบัติการนั้นไม่ตรงไปตรงมา
leonigmig

7
ผู้ใช้ที่ต้องการใช้ผักกาดหอมร่วมกับ django ควรทราบว่าโดยค่าเริ่มต้นจะใช้ฐานข้อมูลเริ่มต้นของคุณในการทดสอบ ตัวเลือกการออกแบบที่น่าสนใจนี้ทำให้ฉันเสียค่าใช้จ่ายฐานข้อมูลการผลิตหนึ่งฐานข้อมูล :(
Rachel

3
มีทางเลือกอื่นสำหรับผักกาดหอมเช่นกันเช่น Behave; นี่คือบล็อกโพสต์เปรียบเทียบพวกเขาและการสนับสนุนการประพฤติ
driftcatcher

1
ขอบคุณ @seafangs - พฤติกรรมดูจัดการได้ดีสำหรับโครงการขนาดใหญ่มากกว่าผักกาดหอม
jamesc

หากคุณใช้ django ให้ประหยัดเวลาในการใช้ Lettuce เวอร์ชันปัจจุบัน 2.19 ใช้ไม่ได้กับ django ล่าสุด
James Lin

46

ผมขอแนะนำให้ประพฤติ

กำลังมองหาโคลนแตงกวาสำหรับ Python ฉันเริ่มใช้ผักกาดหอม แต่พบว่ามันเป็นแบบจำลองที่ออกแบบมาอย่างงุ่มง่าม Unpythonic มาก

จากนั้นฉันก็ค้นพบพฤติกรรมและมีความสุขกับมันมาก


11
ฉันเปลี่ยนไปใช้พฤติกรรมจากผักกาดหอมเมื่อพฤติกรรมเริ่มต้นของการใช้ฐานข้อมูลเริ่มต้นสำหรับการทดสอบในโครงการ django ทำให้ฉันเสียค่าใช้จ่ายฐานข้อมูลการผลิตบนเซิร์ฟเวอร์ที่ใช้งานจริง :( ฉันชอบพฤติกรรมมากฉันได้เริ่มโครงการ django-behavior เพื่อเชื่อมต่อกับมัน กรอบการทดสอบของ django github.com/rwillmer/django-behave
Rachel

1
ฉันรู้สึกถึงความเจ็บปวดของคุณฉันดีใจที่ได้เห็นความทุกข์ทรมานของคุณมีส่วนทำให้ระบบนิเวศของ django เฟื่องฟู ;-)
John Wang

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

29

ฉันแนะนำให้คุณใช้ชุดเครื่องมือที่พัฒนาขึ้นเพื่อช่วยโปรแกรมเมอร์ในการฝึกฝน BDD และ TDD ชุดเครื่องมือนี้ประกอบด้วย: pycukes , specloud , ludibrioและควร-DSL

Should-DSLจะทำให้คุณมีความคาดหวังเหมือน RSpec ทุกสิ่งที่คุณสามารถทำได้ด้วย RSpec expectation API ก็ควร -dsl เช่นกัน คุณสามารถคว้าlatestversion จาก Github

SpecLoudช่วยคุณในการรัน unittests เหมือน BDD คุณสามารถติดตั้งได้โดยทำ

pip install specloud

Ludibrioเป็นห้องสมุดสำหรับการทดสอบคู่ (Mocks, Stubs and Dummies) ติดตั้งผ่าน

pip install ludibrio

และPyCukesเป็นเครื่องมือหลักสำหรับ BDD มันจะเรียกใช้สถานการณ์ ฯลฯ อีกครั้ง

pip install pycukes

สำหรับข้อมูลเพิ่มเติมโปรดอ่านเอกสารเครื่องมือที่PyPi


พบเอกสารที่มีประโยชน์นี้ในขณะที่หารายละเอียดคำตอบของคุณ: arxiv.org/pdf/1007.1722
amit

ฉันชอบ should-dsl ฉันได้พิจารณา DSL สำหรับ python BDD - มีอยู่ไม่กี่ตัวอันนี้ดูเหมือนจะแสดงออกมาก
Danny Staple

ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับเฟรมเวิร์ก BDD ที่เรียกว่า Pyramid ลิงก์ที่อ้างถึงในเอกสารที่เชื่อมโยงโดย @phaedrus นำไปสู่ไซต์ที่ดูน่าสงสัยซึ่งไม่เกี่ยวข้องกับการทดสอบและ googling ชี้ไปที่Pyramidซึ่งเป็นเว็บเฟรมเวิร์ก ใครสามารถให้ลิงค์ที่เป็นปัจจุบัน?
Björn Pollex

1
ฉันชอบแน่ใจยืนยัน DSL
fatuhoku

@ BjörnPollexผู้สร้างเครื่องมือเหล่านี้ไม่สามารถใช้ชื่อ Pyramid ได้เนื่องจาก Pyramid Web Framework ตอนนี้เป็นเพียงเครื่องมือที่แยกออกจากกัน
Douglas Camata

11

โพสต์และคำตอบที่ยอดเยี่ยม แค่อยากจะอัปเดตเพื่อรวมFreshenไว้ในรายการนี้เนื่องจากฉันอ่าน pycukes ถูกยกเลิก โพสต์ที่ดีเกี่ยวกับการใช้ BDD และ Django กับสดชื่นเป็นที่นี่


9

คุณสามารถใช้คำว่า "sure"เพื่อการยืนยันที่ชัดเจน (เช่นเดียวกับใน RSpec)


พาราเบน! คุณทำให้ฉันนึกถึงรหัสใน magic.py ฉันไม่รู้ว่า "วิธีการขยาย" (คลาสแบบเปิด) เป็นไปได้ใน Python
mdwhatcott

8

โครงการ Pyccuracy เป็นความพยายามในการจัดหาภาษาเฉพาะโดเมนสำหรับ BDD ใน Python

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


6

ฉันชอบPyccuracyมาก วันนี้ฉันกำลังใช้มันในโครงการขนาดกลาง


3
ฉันสนใจในการเปรียบเทียบ Pyccuracy กับ Lettuce ที่ใคร ๆ ก็สามารถแบ่งปันได้
michela

อาจรวม Freshen (ลิงก์ในคำตอบด้านบน) ด้วยในการเปรียบเทียบ
Amit

แล้วถามว่าที่นี่: quora.com/...
Amit

6

ลองpyspecs การทำแบบทดสอบให้อ่านง่ายและทำงานอย่างต่อเนื่องในระหว่างการพัฒนาเป็นเป้าหมายหลักสองประการของฉันในการสร้างโครงการนี้

รหัสทดสอบ:

from pyspecs import given, when, then, and_, the, this

with given.two_operands:
    a = 2
    b = 3

    with when.supplied_to_the_add_function:
        total = a + b

        with then.the_total_should_be_mathmatically_correct:
            the(total).should.equal(5)

        with and_.the_total_should_be_greater_than_either_operand:
            the(total).should.be_greater_than(a)
            the(total).should.be_greater_than(b)

    with when.supplied_to_the_subtract_function:
        difference = b - a

        with then.the_difference_should_be_mathmatically_correct:
            the(difference).should.equal(1)

เอาต์พุตคอนโซล:

# run_pyspecs.py

  | • given two operands 
  |   • when supplied to the add function 
  |     • then the total should be mathmatically correct 
  |     • and the total should be greater than either operand 
  |   • when supplied to the subtract function 
  |     • then the difference should be mathmatically correct 

(ok) 6 passed (6 steps, 1 scenarios in 0.0002 seconds)

4

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

หากการตีความของฉันถูกต้องคุณสามารถรับเฟรมเวิร์ก BDD ได้เพียงแค่เปลี่ยนชื่อวิธีการในการใช้งานxUnit ดังนั้นเพียงใช้Unittestของไลบรารีมาตรฐานต่อไป

แก้ไข: รวดเร็วเปิด Google ขึ้นพฤติกรรมโมดูลในร้านชีส นอกจากนี้การค้นหาสำหรับ BDD มีไม่พบสิ่งอื่นใด


TDD เป็นการปฏิวัติแนวปฏิบัติในระดับที่แตกต่างจาก BDD โดยสิ้นเชิง ฉันยังคงรู้สึกขอบคุณวิธีการเขียนแบบทดสอบในรูปแบบ BDD
JtR

1
BDD เริ่มต้นที่ระดับหน่วยนี่เป็นเรื่องจริง มันเติบโตขึ้นอย่างรวดเร็วพอสมควรที่จะครอบคลุมพฤติกรรมระดับระบบโดยที่บริบทเหตุการณ์และผลลัพธ์ได้รับประโยชน์จากการนำกลับมาใช้ใหม่อีกเล็กน้อยดังนั้นการเพิ่มจำนวนของเครื่องมือเพื่อสนับสนุนทั้งสถานการณ์นั้นและสถานการณ์ที่เป็นภาษาธรรมชาติซึ่งได้มาจากการสนทนากับผู้มีส่วนได้ส่วนเสียที่ไม่ใช่ด้านเทคนิค เนื่องจากคำถามนี้ถูกถามเราจึงนำ BDD ไปสู่ระดับการมองเห็นของโครงการโดยใช้ Feature Injection โดยเน้นที่การค้นพบผ่านการสนทนาและภาษาโดเมน ยังไม่มีอะไรใหม่ภายใต้ดวงอาทิตย์
Lunivore

ผมชอบพูดคุยเกี่ยวกับ BDD youtube.com/watch?v=pherUEzdJow ฉันแสดงวิธีที่ดีในการเขียนข้อกำหนดและทดสอบ
aisbaa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.