2011-11-20 13 views
12

In Java in genere si creano due cartelle di origine src e test con una gerarchia di pacchetti identica.Qual è la migliore pratica per organizzare la struttura della cartella test di Ruby?

In Ruby è sufficiente inserire tutti i test nella stessa cartella della classe sottoposta a test? O crei una gerarchia simile in una cartella separata? In tal caso, come gestisci i percorsi require nei test delle tue unità?

+1

@nash: questo è il primo commento che ho letto su SO che ho trovato scortese. –

+2

Siamo spiacenti, è stato davvero maleducato. Proverò a capirlo. Ad esempio, puoi guardare qui la cartella specspec spec (https://github.com/rspec/rspec-core/tree/master/spec) Questi ragazzi sanno davvero come scrivere le specifiche. Ancora una volta mi dispiace. –

risposta

8

Inizialmente, ogni gemma ha un layout tipico. Il codice è quasi completamente in lib. Nella directory root, ci sono solo metadati come i README, il file gemspec e alcuni dati di configurazione opzionali. Se si scrive un'app Web con Rails o Sinatra, vengono invece utilizzati gli standard di layout

In tutti i tipi di progetto, i test possono essere trovati in posizioni simili. A seconda del framework di test che si utilizza, ci sono diversi standard.

Se si utilizza Test::Unit, i test sono in una directory test. Non esistono standard reali su come organizzare effettivamente i file di test in quella directory. Personalmente ho trovato utile rispecchiare almeno in parte il layout del file del codice testato. Se usi generosamente moduli/spazi dei nomi, questo dovrebbe renderlo piuttosto leggibile.

Se si utilizza RSpec, i test (denominati quindi specifiche) vengono inseriti in una directory spec. Le note sopra riportate sul layout dei test attuali si applicano anche qui.

Alla fine, è principalmente una decisione degli sviluppatori su come impostare i test. Poiché i test sono un'area in cui ogni persona ha opinioni diverse (e stringhe), non c'è un percorso santo verso il successo. Dovresti dare un'occhiata ad alcune gemme che usi e come fanno cose. Un esempio di layout di Test :: Unit può essere trovato nelle gemme di Rails, ad es. per ActiveRecord. Un esempio per i test RSpec è il plugin chiliproject_backlogs per ChiliProject.

+0

Grazie per la risposta completa! Ho notato che spesso esiste un 'spec_helper' che contiene dipendenze nei progetti rspec. –

+0

Per essere chiari, la gemma avrà le directory '\ lib' e' \ test'. – ashes999

0

Sono nuovo anche per Ruby e mi sto ponendo la stessa domanda. La parte che non ho ottenuto è stata come organizzarli gerarchicamente per abbinare un'organizzazione potenzialmente gerarchica di componenti nella directory lib e quindi eseguirli tutti come una suite.

Non sono stato su Google così a lungo, ma i miei risultati sono già più magri del previsto. La cosa più utile che ho trovato è questo dalle ruby wiki:

classi case di prova possono essere raccolti insieme in suite di test che sono file di Ruby che richiedono altri casi di test:

# File: ts_allTheTests.rb
richiedono 'test/unit'
richiedono 'TESTONE'
richiedono
require 'testThree'

In questo modo, i test relativi 'testTwo' può essere raggruppato in modo naturale Inoltre, le suite di test possono contenere altre suite di test, consentendo la costruzione di una gerarchia di test.

In precedenza, ero stato evitando le sottodirectory nella mia directory di prova e fare qualcosa come questo nel mio Rakefile, o qualsiasi file rubino che esegue effettivamente il test:

$LOAD_PATH << File.dirname(__FILE__) 
require 'test/unit' 
Dir.glob('test/test_*', &method(:require)) 

Quindi, se ho combinare le due tecniche Avrei un file per ogni directory che richiede in modo dinamico test da quella directory, che a sua volta sarebbe richiesto dal file per la directory padre. Ma questo sembra sconfiggere il mio sforzo iniziale per evitare il tedio.

Quindi ho trovato someclasses in ruby-doc che sembrava rilevante ma poco documentato. Tuttavia, sembra che ci siano più informazioni disponibili al rialzo per Test::Unit che avrei potuto facilmente perdere. Non ho ancora letto tutto, ma sembra promettente.