RSpec vs Cucumber (cerita RSpec) [ditutup]

136

Kapan saya harus menggunakan spesifikasi untuk aplikasi Rails dan kapan Cucumber (sebelumnya rspec-stories)? Saya tahu bagaimana keduanya bekerja dan secara aktif menggunakan spesifikasi, tentu saja. Tapi masih terasa aneh menggunakan Timun. Pandangan saya saat ini tentang hal ini, adalah nyaman menggunakan Ketimun saat Anda menerapkan aplikasi untuk klien dan belum memahami bagaimana keseluruhan sistem seharusnya bekerja.

Tetapi bagaimana jika saya melakukan proyek saya sendiri? Untuk sebagian besar waktu, saya tahu bagaimana bagian-bagian sistem berinteraksi. Yang perlu saya lakukan adalah menulis sekumpulan tes unit. Apa situasi yang mungkin terjadi ketika saya membutuhkan Mentimun?

Dan, sebagai pertanyaan kedua yang sesuai: apakah saya harus menulis spesifikasi jika saya menulis cerita Mentimun? Bukankah ini merupakan pengujian ganda untuk hal yang sama?

snitko
sumber
12
Kenapa setiap satu [Closed] pertanyaan yang saya temui ditutup sebagai "tidak konstruktif" oleh Bill the Lizard DAN pada saat yang sama pertanyaannya adalah upvoted berkali-kali!?! apa yang saya lewatkan?
Ashkan Kh. Nazary
4
Saya sangat setuju. Saya masih sangat bingung di mana harus memposting pertanyaan seperti "praktik terbaik apa yang harus dilakukan XXX".
Dean
3
Saya setuju, saya menemukan pertanyaan bagus dengan jawaban yang berwawasan dan membantu sepanjang waktu di SO yang telah ditutup karena satu dan lain alasan.
Russell Silva
Saya menemukan pertanyaan ini pada tahun 2017 karena masih relevan, dan masih merupakan pertanyaan yang bagus, dengan jawaban yang bagus. Itu juga tidak mengundang pendapat karena kerangka kerja yang dimaksud dirancang oleh sebagian besar orang yang sama untuk dua masalah yang benar-benar terpisah ... tetapi Anda perlu sedikit keahlian untuk mengetahuinya.
Lunivora

Jawaban:

114

Jika Anda belum melakukannya, Anda mungkin ingin melihat artikel bagus Dan North, What's in a Story? sebagai titik awal.

Kami memiliki dua kegunaan utama cerita Ketimun. Pertama, karena bentuk cerita sangat spesifik, ini membantu memfokuskan artikulasi pemilik produk terhadap fitur yang ingin dibangunnya. Ini adalah penggunaan cerita "token untuk percakapan", dan akan sangat berharga baik kita menerapkan cerita dalam kode atau tidak. Kedua, ketika proses berjalan cukup baik sehingga kami memiliki cerita lengkap sebelum kami mulai menulis fitur (lebih dari cita-cita yang kami perjuangkan daripada kenyataan sehari-hari), Anda memiliki kriteria penerimaan yang dijabarkan dengan jelas dan Anda tahu persis apa dan bagaimana banyak yang harus dibangun.

Dalam pekerjaan Rails kami, cerita Ketimun tidak menggantikan tes unit rspec. Kedua berjalan beriringan. Dalam praktiknya, pengujian unit cenderung mendorong pengembangan model dan pengontrol, dan story cenderung mendorong pengembangan tampilan (kami cenderung tidak menulis rspec untuk tampilan kami) dan memberikan pengujian yang baik untuk aplikasi secara keseluruhan dari perspektif pengguna.

Jika Anda bekerja sendiri, aspek komunikasi mungkin tidak begitu menarik bagi Anda, tetapi pengujian integrasi yang Anda dapatkan dari Mentimun mungkin saja menarik. Jika Anda memanfaatkan webrat , menulis Ketimun bisa cepat dan tidak menyakitkan untuk banyak fungsi dasar Anda.

Abie
sumber
6
Anda menggabungkan dua masalah terpisah; 1) apakah baik melakukan pengujian integrasi dan penerimaan, dan 2) apakah mentimun adalah alat yang baik untuk menulis pengujian tersebut. Untuk 1 - ya, itu jelas merupakan ide yang bagus. Untuk 2, jarang lebih efisien bagi tim pengembangan untuk menulis tes dalam bahasa dengan begitu banyak tipuan, ketika Anda dapat menulis tes integrasi dan penerimaan yang sangat terbaca dalam rspec dan kapibara (atau - semoga kami tidak menyelidiki perpustakaan standar Ruby - tes / unit atau minitest, bersama dengan kapibara). Lihat pos yang ditautkan oleh Jack Kinsella di bawah ini.
Graham Ashton
Setuju dengan Anda Abie! Integrasi mentimun sangat penting!
dpapadopoulos
26

Anggap saja sebagai siklus:

Tulis fitur Mentimun Anda, lalu saat mengembangkan bagian untuk fitur tersebut, tulis spesifikasi untuk melengkapi komponen individual. Lanjutkan melengkapi spesifikasi hingga Anda telah menulis fungsionalitas yang cukup agar fitur dapat lolos, lalu tulis fitur Anda berikutnya.

Josiah Kiehl
sumber
1
Ada contoh yang sangat bagus dari siklus BDD Luar-dalam .
rdamborsky
21

Pendapat saya adalah bahwa menggunakan Mentimun dalam banyak situasi adalah ide yang buruk karena biaya produktivitas yang ditimbulkan oleh sintaksnya pada Anda. Saya banyak menulis tentang topik di Mengapa Repot-Repot Dengan Tes Ketimun?

Jack Kinsella
sumber
1
Saya telah membaca artikel Anda dan sebagai penggemar mentimun, saya harus mengatakan bahwa saya setuju dengan banyak poin yang Anda kutip dalam artikel Anda. Meskipun, menurut saya mentimun adalah cara yang baik untuk memformalkan tes dan membuatnya mudah dibaca oleh orang luar.
huug
1
Jack - pos yang fantastis. Terima kasih banyak telah menulisnya, Anda telah menyelamatkan saya dari masalah melakukannya sendiri.
Graham Ashton
3
huug - Ini mungkin cara yang baik untuk mengekspos tes ke "orang luar", tetapi Anda menunjukkan kepada saya anggota tim non-teknis yang ingin membaca tes, dan saya akan menunjukkan kepada Anda tim yang membuang-buang anggaran. Juga, saya belum bekerja dengan anggota non-teknis dari sebuah proyek yang ingin membuang-buang waktu membaca tes. Entahlah, mungkin aku beruntung ...
Graham Ashton
Suara negatif. Saya merasa bahwa mendeskripsikan fitur pengguna dalam istilah pengguna berguna bagi saya, sebagai pengembang, terlepas dari apakah pengguna pernah membaca cerita Mentimun saya. Itulah mengapa saya menggunakan Mentimun di semua proyek saya dan mendorong orang lain untuk melakukan hal yang sama.
Marnen Laibow-Koser
8

Kisah Mentimun lebih merupakan deskripsi dari keseluruhan masalah yang dipecahkan aplikasi Anda, daripada jika bit kode individual berfungsi (yaitu tes unit).

Seperti yang dijelaskan Abie, ini hampir merupakan daftar persyaratan yang harus dipenuhi aplikasi, dan sangat membantu untuk komunikasi dengan klien Anda, serta dapat diuji secara langsung.

Dave Glassborow
sumber
2
Persis. Mentimun menjelaskan penggunaan aplikasi Anda. Misalnya "Saya klik di sini dan saya berharap mendapatkan hasil ini atau itu". Spesifikasi lebih pada level 'model'. Seperti, ketika saya memanggil metode itu dengan parameter ini dan itu, saya mengharapkannya mengembalikan hasil ini.
Ariejan
6

Saat ini Anda dapat menggunakan rspec dengan Capybara dan Selenium Webdriver dan menghindari keharusan membangun dan memelihara semua pengurai cerita Ketimun. Inilah yang akan saya rekomendasikan:

  1. Tulis cerita Anda
  2. Menggunakan RSpec, saya akan membuat tes integrasi misalnya: spec / integrations / socks_rspec.rb
  3. Kemudian saya akan membuat tes integrasi yang mencakup deskripsi baru dan blokir untuk setiap skenario
  4. Kemudian saya akan menerapkan fungsionalitas minimal yang diperlukan untuk mendapatkan uji integrasi dan sementara pergi lebih dalam ke belakang (ke dalam pengontrol dan model, dll) saya akan TDD pada pengontrol dan model.
  5. Setelah Anda kembali, pengujian integrasi Anda harus lulus dan Anda dapat terus menambahkan langkah-langkah ke pengujian integrasi
  6. ulang

Satu hal yang perlu diperhatikan, bagaimanapun, adalah bahwa tes pengontrol dan integrasi memiliki tumpang tindih yang mungkin tidak diperlukan sehingga Anda harus menggunakan penilaian terbaik Anda sehingga Anda tidak membuang waktu Anda.

Juga, begitu Anda menemukan alur Anda, Anda akan merasa paling menyenangkan untuk mengembangkan menggunakan BDD, sampai saat itu jangan merasa bersalah jika Anda merasa tidak melakukannya dengan sempurna dan tidak terlalu memikirkannya. Anda akan melakukannya dengan baik!

PeppyHeppy
sumber
2

Tetapi bagaimana jika saya melakukan proyek saya sendiri? Untuk sebagian besar waktu, saya tahu bagaimana bagian-bagian sistem berinteraksi. Yang perlu saya lakukan adalah menulis sekumpulan tes unit. Apa situasi yang mungkin terjadi ketika saya membutuhkan Mentimun?

Anda masih membutuhkan Timun. Anda memerlukannya untuk mendokumentasikan bagaimana Anda melihat sistem bekerja, dan Anda memerlukannya untuk memastikan Anda tidak merusak fungsionalitas saat Anda mengubah sesuatu.

Dengan kata lain, Anda memerlukan cerita Ketimun untuk alasan yang sama seperti Anda memerlukan tes unit - mereka hanya bekerja pada tingkat abstraksi yang lebih tinggi.

Marnen Laibow-Koser
sumber
2
Saya tidak akan mengatakan bahwa Ketimun itu penting, tetapi Anda pasti harus memiliki semacam tes integrasi, karena tes unit biasanya digunakan hanya untuk menguji kelas secara terpisah.
Andy Waite
1
Baik. Dan dalam banyak kasus, Mentimun adalah cara terbaik untuk menulis tes integrasi.
Marnen Laibow-Koser