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.
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.
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
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 :(
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 .
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ö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 .
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.
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 =3with 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 in0.0002 seconds)
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.
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.
Jawaban:
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.
sumber
Selada artinya menjadi alat seperti mentimun untuk python: http://lettuce.it/
Anda dapat mengambil sumbernya di github.com/gabrielfalcao/lettuce
sumber
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.
sumber
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
Ludibrio adalah perpustakaan untuk tes ganda (Mocks, Stubs and Dummies). Pasang melalui
Dan PyCukes adalah alat utama untuk BDD. Ini akan menjalankan Skenario, dll. Sekali lagi,
Untuk info lebih lanjut silakan baca dokumentasi alat di PyPi .
sumber
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 .
sumber
Anda dapat menggunakan "yakin" untuk pernyataan ekspresif (seperti di RSpec)
sumber
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
Saya sangat menyukai Pyccuracy . Saya menerapkannya pada proyek ukuran sedang hari ini.
sumber
Coba pyspecs . Membuat tes mudah dibaca dan terus berjalan selama pengembangan adalah dua tujuan utama saya dalam menciptakan proyek ini.
Kode Tes:
Output Konsol:
sumber
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.
sumber