Come fare Test Driven Development (TDD) in Drupal?


30
  • Quali sono gli strumenti utilizzati TDD in Drupal (moduli PHP, moduli Drupal, ecc.)?
  • Come si presenta il flusso di lavoro di commit / test / deploy? Usi Phing, PHPUnderControl, Hudson per gestire questo flusso di lavoro?
  • In che modo i test unitari rendono il tuo codice più affidabile?
  • Hai bisogno di un server di test unità separato, costoso e autonomo o puoi farlo da un laptop?

So che Robert ha scritto un ottimo post tecnica qui di test di unità in Drupal con SimpleTest; Sono più interessato a coprire il flusso di lavoro e la parte di configurazione. Attualmente ho una macchina di sviluppo, un server di gestione temporanea e di produzione. Sia i siti di produzione che quelli di produzione girano su una CPU Dreamhost VPS da 300 MB di RAM / 300 MHz.

Risposte:


8

Nel mondo ruby, TDD è facilitato da strumenti integrati nel framework. Factory Girl, Mocha, rSpec e altri consentono agli sviluppatori di creare test facili e dinamici per affrontare i casi di test necessari.

Sono stato anche frustrato dalla mancanza di strumenti TDD in Drupal. Il mio più grande problema con loro è la quantità di tempo necessaria per eseguire un singolo test. I cicli di sviluppo non possono essere rallentati da test individuali che richiedono 60-90 secondi per ogni iterazione. Le suite complete di test verrebbero eseguite nell'arco di più ore, se ti preoccupi di scrivere i test.

Ho il sospetto che abbia a che fare con la copia di un db completo ogni volta che viene eseguito un test, ma non è probabile che cambi nel prossimo futuro da quello che posso dire, soprattutto se è necessario utilizzare DrupalWebTestCase per farlo.

Sto hackerando una soluzione usando Phactory e phpunit, che avvia manualmente Drupal. Ovviamente ho riscontrato alcuni problemi e non l'ho ancora finito, ma ci sta arrivando.

Fortunatamente la maggior parte del mio lavoro è a livello di backend, quindi posso rimanere al livello DRUPAL_BOOTSTRAP_DATABASE. Ma sto correndo in altre situazioni in cui avrò bisogno dell'intero stack.

Alla fine, TDD in Drupal non è ben supportato, quindi puoi scriverne uno tuo per farlo funzionare al di fuori del framework di test drupal o resistere alle scarse prestazioni.

-- AGGIORNARE --

Ho installato con successo una completa integrazione di Drupal con Phactory e ora sto eseguendo i miei test tramite phpunit invece del Drupal Web Test Case. Quindi è possibile.

Spero di arrivare al punto in cui posso rilasciarlo e può essere incorporato nel documento Phactory.

- AGGIORNAMENTO 2 -

Documento su come installo Phactory è su https://github.com/trimbletodd/phactory .


Grazie per il tuo contributo. È molto interessante quello che sta succedendo con Phactory per i test unitari. In attesa di vedere quel modulo Drupal che hai cucinato;)
barista dilettante il

Ho messo un breve documento su come sto gestendo Phactory all'interno di Drupal sul mio fork. Ho inviato una richiesta pull al master, ma non è stata ancora incorporata. github.com/trimbletodd/phactory
trimbletodd

Questa domanda e le sue risposte continuano a tornare ancora oggi. Fai rock per rotolare la tua forcella / soluzione. Pertanto, lei riceve il premio per la risposta accettata, signore.
barista dilettante l'

12

Poiché il blog di Mark non è in linea, menzionerò alcuni degli strumenti implementati dal suo team:

Test funzionali: Selenium
Test unitari: Server di
build più semplice: Jenkins
Benchmark delle prestazioni: XDebug + Cachegrind

Nei due anni trascorsi da quando ho posto questa domanda, ho visto alcuni strumenti aggiuntivi guadagnare popolarità nella scena TDD. Oggi quando parli di Test Driven Development (in un contesto Drupal, ovviamente) ci sono due facce della stessa medaglia: test front-end e test back-end.

Ecco due presentazioni che si distinguono dall'ultimo Drupalcon Portland 2013 che rappresentano questo argomento:

Sviluppo, By The Numbers , test di backend.
Test automatizzati con Jasmine e PhantomJS , test frontend.

La prima presentazione non è correlata a test unitari o funzionali (in senso stretto), riguarda più gli strumenti per misurare la qualità del codice. Tuttavia, ritengo che sia in qualche modo correlato all'argomento.


1
Wow! Grazie per essere tornato 2 ANNI dopo per farci sapere cosa hai scoperto!
Fai

5

L'unica cosa di cui sono a conoscenza è che per i moduli forniti, è possibile abilitare il test automatizzato di commit e patch nella coda dei problemi, vedere http://drupal.org/node/689990 . È ancora alquanto instabile, soprattutto se si hanno dipendenze.

La maggior parte dei progetti probabilmente sta facendo qualcosa di più sulla falsariga di uno sviluppo guidato da bug, il che in sostanza si riduce a scrivere un test prima quando viene trovato un bug e poi a risolverlo. Se mai;)

Dalla mia esperienza personale, TDD è piuttosto difficile in Drupal, perché spesso non scrivi (solo) test unitari con Simpletest ma test di integrazione, in cui visualizzi pagine e invii moduli. Quindi può essere piuttosto difficile scrivere buoni test in anticipo. Ma forse non sono abituato a farlo :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.