2009-09-06 15 views
157

Ho familiarità con i concetti (ho preso lezioni di test al college), ma non sono sicuro di come usarli veramente poiché non ho mai lavorato a un progetto TDD "reale".Come iniziare su TDD con Ruby on Rails?

Sto per avviare lo sviluppo di un progetto utilizzando Ruby on Rails (molto probabilmente utilizzando 2.3). Questa applicazione verrà utilizzata per gestire dati, utenti e alcuni file. All'inizio non sarà troppo complicato, ma potrebbe crescere molto nei prossimi 6 mesi, quindi ritengo che questo sia il momento giusto per ottenere di più in TDD.

Ho un idea di base su come farlo, ma ho ancora bisogno di alcune indicazioni e consigli:

  • Cosa Ruby on Rails TDD 101 articolo devo leggere?

  • Cosa devo testare?

  • Quale gemma/plug-in dovrei usare?

  • Devo usare rspec? Qualcos'altro?

  • Una volta che ho tutte le mie classi di test, come faccio a distribuirle? (ad esempio: Integrazione continua)

  • Quanto tempo richiede TDD?

  • Ho bisogno di leggere un libro su questo o posso ottenere tutto solo giocando con esso e leggendo tutorial online? Se ho bisogno di leggere un libro, quale libro?


Mi piace imparare con esempi così qualcuno potrebbe dirmi come vorrei andare a prendere un approccio TDD per risolvere questo problema:

ho Aziende. Ho dei contatti. Un contatto può essere collegato a 1 azienda. Una società può avere più contatti. I desidera creare modi per creare contatti , società e contatti di collegamento per le aziende.

Non è necessario utilizzare questo esempio nella vostra risposta, ma sarebbe d'aiuto :)

risposta

192

Che articolo di Ruby on Rails TDD 101 dovrei leggere?

Inizierò con a guide to testing rails applications.

Anche Railscast ha alcuni screencast eccellenti su come utilizzare diversi strumenti di test.

Cosa devo testare?

Inizierò con i modelli, poiché sono facili da testare. La semplice regola è che devi coprire ogni affermazione if nel tuo test.

È necessario verificare lo scopo del metodo (per assicurarsi che funzioni come previsto) e tutti i casi limite.

Assicurati anche di non finire sui test.

Quale gemma/plug-in dovrei usare? Dovrei usare rspec? Qualcos'altro?

Quando si avvia, è sufficiente utilizzare Test Unit. È possibile utilizzare rspec o cucumber dopo aver acquisito familiarità con le nozioni di base.

Autotest è uno strumento piacevole da avere se si desidera essere veramente testati. Ma è un 'bello non' richiesto.

Una volta che ho tutte le mie classi di test, come faccio a distribuirle?

Non sono sicuro della domanda. Di solito non distribuisci i test. Una volta che hai tutte le tue classi di test, digita semplicemente "rake test" per eseguire tutti i tuoi test.

Quanto tempo richiede TDD?

Risparmia tempo davvero. Se ti piace il puzzle del labirinto, sai che è quasi sempre più facile risolverlo se vai dal traguardo all'inizio. Lo stesso con TDD. Senza Test Driven stai costantemente pensando 'cosa dovrei fare dopo'. Con Test Driven, il test ti dirà cosa fare dopo (si rompe se la logica non c'è, quindi devi solo aggiustare la parte rotta). Inoltre hai meno bug che ti faranno risparmiare molto tempo a lungo termine.

Ho bisogno di leggere un libro su questo o posso ottenere tutto ciò semplicemente giocando intorno con esso e la lettura on-line tutorial? Se ho bisogno di leggere un libro, quale libro?

Non è necessario un libro. Il modo più efficace per imparare qualsiasi cosa è: fallo e basta. Torna al libro o alle risorse online quando incontri una domanda o un problema. Anche questo è agile.

Nel tuo esempio, le cose che devono essere testate sono: Un contatto può essere collegato a 1 azienda, Una società può avere più contatti, creare modi per creare contatti e collegare i contatti alle aziende.

class CompanyTest <Test::Unit 
    def test_relationship # test associations/relationships 
     c = companies(:some_company) 
     assert_equal [a list of contacts], c.contacts # make sure a company can have multiple contacts 
    end 
end 

class ContactTest<Test::Unit 
    def test_relationships 
     c = contact(:some_contact) 
     assert_equal some_company, c.company # make sure the contact link to 1 company 
    end 

    def test_create/add 
     # test create contacts, here you need to make sure the contact is created correctly, and linked to company correctly 
    end 
end 
+0

grazie per questa risposta davvero completa! – marcgg

+0

Grazie mille. Sono un principiante e mi ha davvero aiutato a cogliere lo scopo del TDD – qasimzee

+3

Il link all'articolo è rotto, ma l'ho trovato qui: http://web.archive.org/web/20100325215651/http://bloritsch.d -haven.net/articles/2008/07/03/test-driven-development-101 – fivetwentysix

5

TDD è tutto di scrivere i test prima. Questo in pratica ti costringe a scrivere il tuo cliente prima di scrivere il codice dell'applicazione. Generalmente, il ciclo scrive un test per un'API che non esiste, esegue il test aspettandosi che non funzioni, scrivi il codice API, esegui di nuovo il test e assicurati che passi. Quindi scrivi il tuo prossimo test ... e così via.

Questo articolo potrebbe anche interessarti di Rails guide.

+0

Grazie per la risposta, il collegamento della guida di rotaie è particolarmente utile – marcgg

3
Che gioiello

/plugin dovrebbe utilizzare?

Mi è sempre piaciuto shoulda.

Quanto tempo richiede TDD?

Il motivo per cui ho sempre preferito lo sviluppo di TDD è che si concentra su come implementerò una parte di codice specifica. Ho la sensazione aneddotica che ogni volta che aderisco più fortemente ai principi TDD, spendo meno tempo a rielaborare in seguito. La quantità di tempo speso è tutto nel modo in cui si scrivono i test unitari. Se i test unitari non catturano il comportamento previsto, tutto il tempo speso su di essi viene sprecato.

13

Ho realizzato una serie di video di 6 episodi che è stata insegnata come classe pubblica a San Francisco nell'estate del 2010. Il materiale copre l'efficienza dei test e dello sviluppatore in Rails 2.3 con RSpec 1.3. Un po 'datato, ma i principali concetti si applicano a Rails 3 con Rspec 2.x

http://www.rubyfocus.biz/class_video/2010/07/19/rails_tdd_class_1.html

9

vi consiglio questo libro: Ruby on Rails Tutorial. Ho quasi finito. Il libro utilizza TDD il libro intero. Provaci!

+0

Il collegamento non funziona –

+0

@Deepak riprovare! – sivabudh