Apa perbedaan antara kerangka kerja BDD untuk Java? [Tutup]

121

Apa pro dan kontra dari setiap framework Behavior Driven Development (BDD) untuk Java?

Saya telah menemukan beberapa di antaranya di sini , misalnya.

Apakah masuk akal untuk menggunakan kerangka kerja BDD jika saya sudah menggunakan pustaka tiruan (mis. Mockito )?

pengguna68109
sumber
tolong definisikan BDD atau tautkan ke definisi
Jason S
4
BDD = Pengembangan Berbasis Perilaku
Vinnie
4
Sayang sekali ini tidak mendapatkan lebih banyak jawaban!
Pablo Fernandez
untuk Cuke4Duke baca cucumber-jvm di bounty saya. Aku masih punya 22 jam untuk memberikan hadiah ...
Sam Hasler

Jawaban:

99

Saya baru saja selesai membandingkan tiga kerangka kerja BDD untuk Java. Jelas temuan saya memiliki tanggal penggunaan-menurut yang cukup singkat.

Konkordion

  • Sangat fleksibel
  • Output laporan yang sangat cantik
  • Kerangka plugin yang bagus
  • Didokumentasikan dengan buruk. Saya harus membaca sumbernya untuk mengetahuinya (untungnya kualitasnya sangat bagus).
  • Jadwal tampaknya akan berakhir dengan erat digabungkan ke html.

EasyB

  • Kurva pembelajaran yang sangat dangkal (bahkan untuk Pengembang non-Groovy)
  • Integrasi DBUnit yang sangat kuat
  • Rupanya tidak ada dukungan untuk parameter (mengarah ke cerita yang sangat samar atau duplikasi antara teks dan kode (edit: sebenarnya ada tetapi dokumentasi untuk itu sangat tersembunyi.)
  • Cerita dan Kode sangat erat (file yang sama)
  • Keluaran laporan yang sangat mendasar
  • Tidak dapat mengaktifkan plugin IntelliJ
  • Komunitas tidak aktif (plugin Maven tampaknya telah rusak selama tiga bulan - tidak banyak contoh kode untuk digunakan)

JBehave

  • Sangat bertenaga dan fleksibel (misalnya pengurangan pelat ketel melalui komposisi lantai sebagai prasyarat)
  • Dokumentasi dan contoh yang ekstensif (jika terfragmentasi)
  • Dukungan ekstensif (jika luar biasa) untuk kerangka kerja dan lingkungan yang berbeda
  • Pemisahan yang sangat baik antara file cerita dari kode
  • Tampaknya memiliki komunitas yang cukup aktif dan lebih banyak contoh serta diskusi tentangnya di web.
  • Kurva pembelajaran yang cukup curam (butuh waktu 3-4 kali lebih lama untuk mengetahuinya daripada Concordion / EasyB)

Saya tidak memiliki kesempatan untuk mencoba Cuke4Duke dari JDave seperti yang saya inginkan, tetapi mungkin akan mendorong JBehave saat ini.

Caoilte
sumber
4
+1: sejauh ini jawaban terbaik di sini. Menambahkan tautan.
haylem
35

"pro dan kontra" mungkin berbeda untuk orang yang berbeda. Saya biasanya melihat

  • kegiatan pengembangan , misalnya apakah rilis baru kemungkinan besar atau rilis terakhir berusia 2 tahun.
  • kematangan , misalnya sudah berapa lama, apakah ada tutorial dan bahkan mungkin buku tersedia. (Saya tidak membaca buku-buku ini, itu hanya tanda adopsi.)
  • dukungan alat , misalnya apakah ada plugin Eclipse, dukungan Ant, dll
  • ukuran dependensi , saya tidak suka kerangka kerja yang datang dengan segala sesuatunya sendiri. misalnya saya ingin memilih kerangka kerja mocking saya sendiri.
  • jenis lisensi , ini penting bagi saya karena persyaratan hukum di perusahaan tempat saya bekerja.
  • kompatibilitas dengan alat terkait , misalnya apakah menggunakan bahasa Gherkin atau tidak.

Dan dari beberapa kerangka kerja yang saya lihat

  • Insting buruk : aktivitas terakhir Mar 2010, bagus : Lisensi ASF
  • JDave buruk : dilengkapi dengan korek api dan olok-olok, bagus : aktivitas terakhir Jan 2011, lisensi ASF
  • easyb buruk : aktivitas terakhir Okt 2010, tidak yakin : menggunakan Groovy. Ini mungkin baik-baik saja, tetapi akan menjadi masalah untuk adopsi dalam kasus saya.
  • beanspec buruk : hanya satu versi pada tahun 2007, ini sudah mati
  • bdoc buruk : aktivitas terakhir Jan 2010, tidak yakin : sepertinya pergi ke arah lain, membuat laporan dari kode.
  • spock buruk : mungkin agak ekstrim, ini adalah kerangka pengujian lengkap, tidak hanya BDD, bagus : sangat aktif, sangat keren.
  • jbehave , "ibu" dari semua BDD di Java, buruk : sangat kuat = kompleks, lisensi tidak kompatibel (bagi saya), hadir dengan hampir semua pustaka pengujian dan banyak lagi, bagus : berdasarkan RSpec dan karenanya kompatibel, plugin gerhana, integrasi maven , komunitas yang sangat aktif
  • ginkgo4j , kerangka kerja BDD untuk Java juga didasarkan pada RSpec Ruby tetapi menggunakan lambda Java (bukan anotasi) untuk memungkinkan Anda membuat pengujian yang sangat kontekstual dan sangat mudah dibaca. Sederhana. Sangat kuat. Lisensi Apache 2 open source.

Mengenai ejekan: Anda pasti membutuhkan kerangka kerja yang mengejek juga. Kerangka kerja BDD hanya membantu Anda dalam menulis spesifikasi, tetapi beberapa pengujian memerlukan tiruan atau rintisan, khususnya. ketika Anda mendesain dari atas ke bawah (dari ikhtisar hingga detail).

Peter Kofler
sumber
jbehave adalah 3-klausa BSD berlisensi: jbehave.org/license.html . Saya tidak yakin mengapa ada orang yang mempermasalahkan itu?
Ramon
Ramon, ini tentang ketergantungan. Mereka ada banyak. Mungkin semuanya Apache atau BSD, saya tidak repot-repot memeriksanya.
Peter Kofler
Daftar terbaru yang baik dari kerangka kerja BDD behaviour-driven.org/Implementations
Paul Verest
Anda bisa menambahkan JGiven ke daftar itu.
Jan Schaefer
20

Apa kerangka kerja BDD terbaik untuk digunakan dengan Java? Mengapa? Apa pro dan kontra dari setiap framework?

Berikut adalah tautan menarik tentang Concordion vs. Cucumber dan Pengujian Penerimaan berbasis Java

Saya telah menemukan beberapa di antaranya di sini, tetapi saya tidak yakin mana yang harus dipilih.

Sungguh, lihat yang disebutkan di atas.

Apakah masuk akal untuk menggunakan kerangka kerja BDD jika saya sudah menggunakan pustaka tiruan (mis. Mockito)?

Jawaban singkatnya: ya, pasti. Sebenarnya, pengujian penerimaan menggunakan kerangka kerja BDD dan pengujian unit dalam isolasi menggunakan objek tiruan sangat berbeda sehingga saya tidak benar-benar mendapatkan pertanyaannya. Pengujian penerimaan adalah pengujian kotak hitam, pengujian digunakan untuk memverifikasi bahwa fitur bisnis berfungsi dan idealnya ditulis oleh analis bisnis. Pengujian unit secara terpisah menggunakan tiruan adalah pengujian kotak putih, pengujian digunakan untuk memverifikasi bahwa suatu unit berfungsi dan ditulis oleh pengembang. Keduanya adalah buty yang berguna, mereka memiliki tujuan yang sangat berbeda. Dengan kata lain, menggunakan Mockito tidak menggantikan kerangka BDD sama sekali dan kebalikannya juga benar.

Pascal Thivent
sumber
Apa yang Anda katakan tidak salah, tetapi itu tidak berarti Anda tidak dapat menulis pengujian unit Anda dengan gaya yang lebih ramah BDD. Bukan spesifikasi dengan contoh, tetapi juga bukan fitur yang tidak berharga. docs.mockito.googlecode.com/hg/org/mockito/BDDMockito.html
cwash
7

Saya awalnya melakukan BDD saya dengan jUnit biasa tetapi saya telah melihat JDave belakangan ini karena hampir 1: 1 dari apa yang saya lakukan dengan jUnit. Ini juga berjalan di atas jUnit sehingga sudah berfungsi di Eclipse dan juga mudah dikonfigurasi untuk bekerja pada sistem integrasi berkelanjutan seperti Hudson. Tidak bisa membandingkannya dengan orang lain tetapi pengalaman saya dengan JDave sejauh ini bagus.

Oh dan bukan ide yang bodoh untuk menggunakan ejekan! Mereka tidak terikat pada TDD / BDD secara khusus, tujuannya adalah untuk meringankan beban pengujian secara umum.

Esko
sumber
6

Wah, saya lihat topiknya panas, banyak jawaban yang bagus ...

Ironisnya, saya baru-baru ini menemukan BDD dan menganggap konsepnya menarik. Hei, itu memaksa untuk menulis tes ... dan spesifikasinya! Walaupun kelihatannya mengejutkan, yang terakhir ini juga bisa hilang di beberapa proyek ... Atau hanya kurang presisi yang diperkenalkan oleh BDD.

Artikel Behavior Driven Development merangkum konsep dan tautan ke beberapa artikel bagus (seperti yang ditulis oleh Andrew Glover). Selain itu, untuk topik utas ini, ini memberikan daftar kerangka kerja BDD yang agak komprehensif (saya kira), banyak di antaranya untuk Java.
Itu tidak menyelesaikan masalah memilih kerangka kerja tetapi setidaknya itu akan memudahkan pencarian ...

Karena BDD sangat bergantung pada keterbacaan kode tes, saya kira kriteria pilihan yang baik adalah melihat tur / tutorial singkat dan melihat mana yang tampaknya lebih sesuai dengan gaya Anda. Kriteria lain dapat berupa fakta alat leverage kerangka kerja yang Anda kenal (pengujian unit, ejekan), penggunaan dengan IDE, dan sebagainya.

PhiLho
sumber
4

Saya mencoba Cucumber-JVM (sebelumnya dikembangkan sebagai Cuke4Duke). Ia menggunakan Gherkin DSL untuk spesifikasi, disimpan sebagai teks biasa.

Contoh Cucumber-JVM di Eclipse 4.2

Ini dapat dijalankan sebagai pengujian JUnit. Jadi satu-satunya masalah untuk mulai menggunakannya adalah membuat pebisnis atau Manajer Produk membaca / menulis fitur. Di Sources.

Hasil

Paul Verest
sumber
3

Tim saya telah menggunakan JBehave selama beberapa waktu. Ini menggunakan file teks biasa untuk menyimpan spesifikasi. Setiap langkah (Diberikan, Kapan, Kemudian) kemudian dijalankan dengan metode tertentu yang dapat mengekstrak parameter dari langkah tersebut. Skenario dapat diindentasi dan diformat dengan baik yang sangat membantu jika klien ingin memverifikasinya.

Ada beberapa masalah juga. Kami telah beralih ke Java 6. Terkadang beberapa langkah skenario diabaikan selama eksekusi. Ini dapat menyebabkan banyak masalah mencari tahu di mana bugnya.

Boris Pavlović
sumber
2
@ Boris Mungkinkah masalah Anda adalah bahwa langkah-langkah PENDING dihitung sebagai lulus (perilaku default) bukannya gagal? Jika itu masalah Anda, Anda dapat mengonfigurasi PendingErrorStrategy: jarvana.com/jarvana/view/org/jbehave/jbehave-core/2.2.1/…
JeffH
3

Tim saya telah menggunakan JBehave dengan sukses - kami pindah ke sana setelah menggunakan EasyB dan menemukan bahwa file skenario teks biasa lebih mudah ditangani.

Matt Green
sumber