Bagaimana cara melakukan Test Driven Development (TDD) di Drupal?


30
  • Apa alat yang digunakan TDD dalam Drupal (modul PHP, modul Drupal, dll)?
  • Seperti apa alur kerja commit / test / deploy Anda? Apakah Anda menggunakan Phing, PHPUnderControl, Hudson untuk mengelola alur kerja ini?
  • Dengan cara apa pengujian unit membuat kode Anda lebih dapat diandalkan?
  • Apakah Anda memerlukan server pengujian unit yang terpisah, mahal, dan berdiri sendiri, atau dapatkah Anda melakukannya dari laptop?

Saya tahu bahwa Robert menulis posting teknis yang sangat baik di sini tentang pengujian unit di Drupal dengan SimpleTest; Saya lebih tertarik untuk membahas alur kerja dan bagian konfigurasi. Saat ini saya memiliki mesin pengembangan, staging dan server produksi. Baik situs produksi dan tahap berjalan pada 300MB RAM / 300MHz CPU Dreamhost VPS.

Jawaban:


8

Di dunia ruby, TDD difasilitasi oleh alat yang dibangun ke dalam kerangka kerja. Factory Girl, Mocha, rSpec, dan lainnya memungkinkan pengembang membuat tes dengan mudah dan dinamis yang mengatasi kasus uji yang diperlukan.

Saya juga frustrasi dengan kurangnya alat TDD di Drupal. Masalah terbesar saya dengan mereka adalah jumlah waktu yang diperlukan untuk menjalankan satu tes. Siklus pengembangan tidak dapat diperlambat oleh tes individual yang membutuhkan 60-90 detik setiap iterasi. Suite tes lengkap akan berjalan ke kerangka waktu beberapa jam, jika Anda repot-repot menulis tes sama sekali.

Saya menduga itu ada hubungannya dengan menyalin db penuh setiap kali tes dijalankan, tetapi itu tidak mungkin berubah dalam waktu dekat dari apa yang dapat saya katakan, terutama jika Anda perlu menggunakan DrupalWebTestCase untuk melakukannya.

Saya meretas bersama solusi menggunakan Phactory dan phpunit, yang bootstraps Drupal secara manual. Jelas mengalami beberapa masalah dan belum menyelesaikannya, tetapi sudah sampai di sana.

Untungnya sebagian besar pekerjaan saya ada di lapisan backend, jadi saya bisa tetap di level DRUPAL_BOOTSTRAP_DATABASE. Tapi saya berlari ke lebih banyak situasi di mana saya akan membutuhkan setumpuk penuh.

Pada akhirnya, TDD di Drupal tidak didukung dengan baik, sehingga Anda dapat menulis sendiri untuk membuatnya bekerja di luar kerangka uji drupal, atau menanggung kinerja yang buruk.

- PEMBARUAN -

Saya telah berhasil menyiapkan integrasi Drupal penuh dengan Phactory, dan sekarang saya menjalankan tes saya melalui phpunit alih-alih Drupal Web Test Case. Jadi itu mungkin.

Mudah-mudahan saya akan sampai pada titik di mana saya bisa melepaskannya dan itu bisa dimasukkan ke dalam dokumen Phactory.

- PEMBARUAN 2 -

Dok tentang bagaimana saya mengatur Phactory di https://github.com/trimbletodd/phactory .


Terima kasih atas kontribusi anda. Sangat menarik apa yang terjadi dengan Phactory untuk pengujian unit. Melihat ke depan untuk melihat modul Drupal yang telah Anda masak;)
barista amatir

Saya memasang dokumen cepat tentang bagaimana saya menangani Phactory dalam Drupal di garpu saya. Saya mengirimkan permintaan tarik kepada master, tetapi belum dimasukkan. github.com/trimbletodd/phactory
trimbletodd

Pertanyaan ini dan jawabannya masih terus kembali hingga hari ini. Anda suka menggulung garpu / solusi Anda sendiri. Karena itu, Anda menerima penghargaan yang diterima, Tuan.
amatir barista

12

Karena blog Mark sedang offline, saya akan menyebutkan beberapa alat yang telah diimplementasikan oleh timnya:

Pengujian fungsional: Pengujian
unit Selenium :
Server Build Simpletest :
Pembandingan kinerja Jenkins : XDebug + Cachegrind

Dalam dua tahun sejak saya mengajukan pertanyaan ini, saya telah melihat beberapa alat tambahan mendapatkan popularitas di TKP. Saat ini ketika Anda berbicara tentang Test Driven Development (dalam konteks Drupal, tentu saja) ada dua sisi mata uang yang sama - pengujian front-end, dan pengujian back-end.

Berikut adalah dua presentasi yang menonjol dari Drupalcon Portland 2013 terbaru yang mewakili masalah ini:

Pengembangan, By The Numbers , pengujian backend.
Pengujian otomatis dengan Jasmine dan PhantomJS , pengujian frontend.

Presentasi pertama tidak terkait dengan pengujian unit atau fungsional (sebenarnya), ini lebih tentang alat untuk mengukur kualitas kode. Namun demikian, saya merasa itu agak terkait dengan topik.


1
Wow! Terima kasih telah kembali 2 TAHUN kemudian untuk memberi tahu kami apa yang Anda temukan! You rock :)
Chapabu

5

Satu-satunya hal yang saya ketahui adalah bahwa untuk modul yang disumbang, Anda dapat mengaktifkan pengujian otomatis terhadap komit dan tambalan dalam antrian masalah, lihat http://drupal.org/node/689990 . Ini masih agak tidak stabil, terutama jika Anda memiliki ketergantungan.

Sebagian besar proyek mungkin lebih melakukan sesuatu di sepanjang pengembangan bug-driven, yang pada dasarnya bermula untuk menulis tes pertama ketika bug ditemukan dan kemudian memperbaikinya. Jika sama sekali;)

Dari pengalaman pribadi saya, TDD agak sulit di Drupal, karena Anda sering tidak menulis (hanya) unit test dengan Simpletest tetapi tes integrasi, tempat Anda melihat halaman dan mengirimkan formulir. Jadi bisa agak sulit untuk menulis tes yang baik di muka. Tapi mungkin aku tidak terbiasa melakukan itu :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.