Come iniziare su TDD con Ruby on Rails? [chiuso]


167

Ho familiarità con i concetti (ho preso lezioni di test al college), ma non sono sicuro di come usarli davvero poiché non ho mai lavorato su un "vero" progetto TDD.

Sto per iniziare lo sviluppo di un progetto usando Ruby on Rails (molto probabilmente usando 2.3). Questa applicazione verrà utilizzata per gestire dati, utenti e alcuni file. All'inizio non sarà troppo complicato, ma potrebbe ridimensionarsi molto nei prossimi 6 mesi, quindi penso che sia il momento giusto per approfondire il TDD.

Ho un'idea di base su come farlo, ma ho ancora bisogno di alcuni suggerimenti e consigli:

  • Quale articolo di Ruby on Rails TDD 101 dovrei leggere?

  • Cosa devo testare?

  • Quale gemma / plugin dovrei usare?

  • Dovrei usare rspec ? Qualcos'altro?

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

  • Quanto è veramente lungo il TDD?

  • Devo leggere un libro su questo o posso ottenere tutto semplicemente giocando con esso e leggendo tutorial online? Se devo leggere un libro, quale libro?


Mi piace imparare con esempi, quindi qualcuno potrebbe dirmi come andrei e adottare un approccio TDD per risolvere questo problema:

Ho delle aziende. Ho dei contatti. Un contatto può essere collegato a 1 azienda. Una società può avere più contatti. Voglio creare modi per creare contatti, aziende e collegare i contatti alle aziende.

Non è necessario utilizzare questo esempio nella risposta ma sarebbe utile :)

Risposte:


202

Quale articolo di Ruby on Rails TDD 101 dovrei leggere?

Inizierò con una guida per testare le applicazioni delle rotaie .

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 è necessario coprire ogni istruzione if nel test.

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

Assicurati anche di non finire con i test.

Quale gemma / plugin dovrei usare? Dovrei usare rspec? Qualcos'altro?

Quando inizi, basta usare Test Unit. È possibile utilizzare rspeco cucumberdopo aver acquisito familiarità con le nozioni di base.

Autotestè uno strumento piacevole da avere se vuoi essere veramente guidato dai test. Ma è un "bello avere" non richiesto.

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

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

Quanto è veramente lungo il TDD?

Fa davvero risparmiare tempo. Se ti piace il labirinto, sai che è quasi sempre più facile risolverlo se vai dall'inizio alla fine. 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 è presente, quindi devi solo riparare la parte rotta). Inoltre hai meno bug che ti faranno risparmiare molto tempo a lungo termine.

Devo leggere un libro su questo o posso ottenere tutto semplicemente giocando con esso e leggendo tutorial online? Se devo leggere un libro, quale libro?

Non hai bisogno di un libro. Il modo più efficace di imparare qualsiasi cosa è: basta farlo. Torna al libro o alle risorse online quando riscontri 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

3
Il collegamento all'articolo è interrotto, ma è stato trovato qui: web.archive.org/web/20100325215651/http://bloritsch.d-haven.net/…
fivetwentysix




5

TDD si occupa innanzitutto di scrivere i test. Questo in pratica ti costringe a scrivere il tuo client prima di scrivere il codice dell'applicazione. Il ciclo è in genere scrivere un test per un'API che non esiste, eseguire il test aspettandosi che fallisca, andare a scrivere il codice API, eseguire nuovamente il test e assicurarsi che passi. Quindi scrivi il tuo prossimo test ... e così via.

Potresti anche essere interessato a questa guida di Rails .



3

Quale gemma / plugin dovrei usare?

Mi è sempre piaciuto dovrei .

Quanto è veramente lungo il TDD?

Il motivo per cui ho sempre favorito lo sviluppo di TDD è che si concentra su come implementerò un pezzo di codice specifico. Ho la sensazione aneddotica che ogni volta che aderisco più fortemente ai principi del TDD, trascorro meno tempo a rielaborare in seguito. La quantità di tempo speso dipende dal modo in cui scrivi i test unitari. Se i test unitari non catturano il comportamento previsto, tutto il tempo trascorso su di essi viene sprecato.

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.