Berlatih BDD dengan python [ditutup]

133

Kerangka kerja dan alat mana yang paling canggih yang tersedia untuk python untuk mempraktikkan Behaviour Driven Development? Terutama menemukan alat yang mirip dengan rspec dan mocha untuk ruby ​​akan sangat bagus.

JtR
sumber
1
Flowp "memungkinkan untuk menulis tes dalam gaya RSpec BDD dengan minimum sihir".
Carl G
7
Hanya pada SO yang sangat informatif sama dengan "tidak konstruktif".
jeremyjjbrown

Jawaban:

38

Ian Bicking merekomendasikan penggunaan doctest untuk desain yang didorong oleh perilaku:

Saya pribadi cenderung menggunakan mock hidung dan voidspace dalam gaya desain yang didorong oleh perilaku. Secara khusus, plugin spec untuk hidung sangat bagus untuk BDD.

Ryan
sumber
7
Andrew Bennetts baru-baru ini menulis beberapa posting tentang mengapa menurutnya doctest dilecehkan. andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-problems
ddaa
4
Saya pikir doctest sebenarnya lebih selaras dengan filosofi BDD, ketika Anda memperlakukannya seperti yang dimaksudkan: Anda mulai menulis tentang perangkat lunak, dan kemudian menyelingi itu dengan contoh-contoh yang juga membentuk tes. Ini telah dideskripsikan sebagai "pengembangan yang didorong oleh dokumen" juga - intinya adalah fokus pada fungsionalitas yang dapat dideskripsikan, bukan unit kerja internal. Saya pikir tradisi xUnit adalah mengerikan di melakukan hal itu.
ianb
48

Selada artinya menjadi alat seperti mentimun untuk python: http://lettuce.it/

Anda dapat mengambil sumbernya di github.com/gabrielfalcao/lettuce

pengguna333958
sumber
pengguna windows mempertimbangkan selada harus tahu, pada saat penulisan, dukungan untuk OS itu tidak mudah.
leonigmig
7
Setiap pengguna yang ingin menggunakan selada dengan Django harus menyadari bahwa secara default, ia menggunakan basis data default Anda untuk pengujian. Pilihan desain yang menarik ini membuat saya kehilangan satu basis data produksi :(
Rachel
3
Ada beberapa alternatif untuk Selada juga, seperti Behave; inilah posting blog yang membandingkan mereka, dan menganjurkan Behave .
driftcatcher
1
Terima kasih @ seafangs - Behave terlihat lebih mudah dikelola untuk proyek-proyek besar daripada Lettuce.
jamesc
Jika Anda menggunakan Django, hemat waktu Anda dari menggunakan Selada, versi saat ini 2.19 tidak berfungsi dengan Django terbaru.
James Lin
46

Saya sangat merekomendasikan berperilaku .

Mencari klon Timun untuk Python, saya mulai menggunakan selada, tetapi menemukan itu replika yang dirancang dengan canggung. Sangat unpythonic.

Kemudian saya menemukan perilaku, dan sangat senang dengan itu.

Suka berteman
sumber
11
Saya beralih untuk berperilaku dari selada ketika perilaku default menggunakan database default untuk pengujian dalam proyek Django membuat saya biaya database produksi pada server hidup :( Saya sangat suka berperilaku; Saya sudah memulai proyek berperilaku Django untuk menghubungkannya ke django test framework github.com/rwillmer/django-behave
Rachel
1
Saya merasakan sakit Anda, juga saya senang melihat penderitaan Anda telah berkontribusi pada berkembangnya ekosistem Django. ;-)
John Wang
1
Bisakah saya menggunakan berperilaku tanpa file fitur? Saya tidak memiliki pengguna non-teknis sehingga menulisnya hanya berisik bagi saya. Jika seseorang tidak dapat membaca tes saya yang diberikan / kapan / kemudian, mereka tidak memiliki urusan apa pun di sana.
jeremyjjbrown
29

Saya merekomendasikan Anda untuk menggunakan seperangkat alat yang dikembangkan untuk membantu programmer dalam praktik BDD dan TDD. Kumpulan alat ini disusun oleh: pycukes , specloud , ludibrio dan should-dsl .

Seharusnya-DSL akan memberi Anda harapan seperti RSpec. Segala sesuatu yang dapat Anda lakukan dengan API harapan RSpec, seharusnya-dsl juga. Anda dapat mengambil versi terbaru dari Github .

SpecLoud membantu Anda menjalankan unitest yang mirip BDD. Anda dapat menginstalnya dengan melakukan

pip install specloud

Ludibrio adalah perpustakaan untuk tes ganda (Mocks, Stubs and Dummies). Pasang melalui

pip install ludibrio

Dan PyCukes adalah alat utama untuk BDD. Ini akan menjalankan Skenario, dll. Sekali lagi,

pip install pycukes

Untuk info lebih lanjut silakan baca dokumentasi alat di PyPi .

Douglas Camata
sumber
Temukan dokumen yang bermanfaat ini sambil mencari detail jawaban Anda: arxiv.org/pdf/1007.1722
amit
Saya suka harus-dsl. Saya telah mempertimbangkan DSL untuk python BDD - ada beberapa, yang ini sepertinya cukup ekspresif.
Danny Staple
Saya tidak dapat menemukan informasi tentang kerangka BDD yang disebut Pyramid. Tautan yang dirujuk dalam makalah yang dihubungkan oleh @phaedrus mengarah ke situs yang tampak meragukan yang tidak ada hubungannya dengan pengujian, dan mengarahkan poin ke Pyramid , kerangka kerja web. Adakah yang bisa memberikan tautan terbaru?
Björn Pollex
1
Saya lebih suka yakin pernyataan DSL.
fatuhoku
@ BjörnPollex, nama Piramida tidak dapat digunakan oleh pembuat alat ini karena Kerangka Web Piramida. Sekarang mereka hanya alat yang terpisah.
Douglas Camata
11

Pos dan jawaban yang bagus. Hanya ingin memperbarui untuk memasukkan Freshen dalam daftar ini ketika saya membaca pycukes dihentikan. Posting bagus tentang menggunakan BDD dan Django dengan Freshen ada di sini .

Steve
sumber
9

Anda dapat menggunakan "yakin" untuk pernyataan ekspresif (seperti di RSpec)

Gabriel Falcão
sumber
Paraben! Anda benar-benar mengejutkan pikiran saya dengan kode di magic.py. Saya tidak tahu bahwa "metode ekstensi" (kelas terbuka) dimungkinkan dengan Python.
mdwhatcott
8

Proyek Pyccuracy adalah upaya untuk menyediakan bahasa khusus domain untuk BDD dengan Python.

Tidak seperti doctest, yang bekerja pada level API, ia mengkodekan operasi level yang lebih tinggi seperti memuat halaman web dan mengirimkan formulir. Saya belum pernah menggunakannya tetapi terlihat agak menjanjikan jika itu yang Anda cari.


sumber
6

Saya sangat menyukai Pyccuracy . Saya menerapkannya pada proyek ukuran sedang hari ini.

Refael Ackermann
sumber
3
Saya tertarik dengan perbandingan Pyccuracy vs Lettuce yang dapat dibagikan oleh siapa saja.
michela
Mungkin termasuk Freshen (ditautkan dalam jawaban di atas) juga dalam perbandingan.
amit
Sudah bertanya di sini: quora.com/...
amit
6

Coba pyspecs . Membuat tes mudah dibaca dan terus berjalan selama pengembangan adalah dua tujuan utama saya dalam menciptakan proyek ini.

Kode Tes:

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)

Output Konsol:

# 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)
mdwhatcott
sumber
4

Saya mungkin benar-benar hilang titik, tapi apa yang saya ditahan dari kertas BDD asli adalah bahwa BDD hanya TDD dikemas ulang untuk menekankan beberapa praktek terbaik.

Jika interpretasi saya benar, Anda bisa mendapatkan kerangka BDD hanya dengan mengganti nama metode di dalam implementasi xUnit . Jadi silakan saja dan gunakan perpustakaan standar unittest .

EDIT: Google cepat menghasilkan modul Perilaku di Toko Keju . Pencarian lebih lanjut untuk BDD tidak menemukan apa pun.

ddaa
sumber
TDD benar-benar adalah praktik merevolusi dalam skala yang sama sekali berbeda dari BDD. Namun saya tetap menghargai cara menulis yang digerakkan dengan gaya BDD.
JtR
1
BDD dimulai pada tingkat unit, ini benar. Ini tumbuh cukup cepat untuk mencakup perilaku tingkat sistem, di mana konteks, peristiwa dan hasil mendapat manfaat dari sedikit lebih dapat digunakan kembali - karenanya proliferasi alat untuk mendukung skenario itu dan bahasa alami diambil dari percakapan dengan pemangku kepentingan non-teknis. Karena pertanyaan ini diajukan, kami telah membawa BDD ke tingkat visi proyek, menggunakan Fitur Injeksi, dengan penekanan yang sama pada penemuan melalui percakapan dan bahasa domain. Masih belum ada yang baru di bawah matahari.
Lunivore
Saya suka pembicaraan ini tentang bdd youtube.com/watch?v=pherUEzdJow . Saya menunjukkan cara yang baik untuk menulis spesifikasi dan memilikinya sebagai tes.
aisbaa