Domanda

Un episodio in due parti con una rapida introduzione. Intro: Sto arrivando a Ruby da Perl, e io sono un po 'perso tra le scelte framework di test. Mi rendo conto che non c'è probabilmente nessun singolo, all-around migliore scelta, ma non posso nemmeno avere un quadro chiaro del campo di gioco.

Quindi, in primo luogo, MINITEST o Test :: Unit? Ho appena realizzato che 1.9.1 default MINITEST ora. Non avevo notato dal momento che tutte le vecchie tutorial Test :: Unit funzionano ancora bene. Se require test/unit, è effettivamente ottenere MINITEST come un emulatore di Test :: Unit (!). Il mio primo pensiero è stato quello di andare con la scelta predefinita di MINITEST (una volta sapevo che era lì), ma anche libri molto recenti non sembrano interessati a insegnarlo. di Ruby Best Practices dice "Ci sono differenze significative" tra i due, ma sceglie di non trattare con loro. Corre anche tutti i suoi test tramite Unit Test :: (più qualche personalizzato add-on). Il nuovo Piccone ha anche molto poco di MINITEST per se , e nel capitolo sui test usano anche la versione di emulazione Test :: Unit di MINITEST. Per chiarire la mia prima domanda è allora: è MINITEST un povero prima opzione? Dovrei default utilizzando il Test :: emulatore Unità?

In secondo luogo, al di là delle opzioni built-in, ci sono Rspec, cetriolo e società per le prove di comportamento guidato. È la comunità inclinando fortemente verso questo stile e questo quadro? Devo solo iniziare con Rspec?

giocherò un po 'con tutti e tre, ma sono curioso di sentire che tipo di consenso (se presente) si sta formando intorno al test in Ruby 1.9.

(A follow-up rapido, come promemoria per me stesso e per chiunque sia interessato. Vedere noreferrer questo link per una panoramica utile delle diverse invocazioni di test :: Unit e MINITEST nei vari Rubini 1.8 a 1.9.1).

È stato utile?

Soluzione

C'è un consenso? Mi piacerebbe Non dico. C'è una voce forte comunità per l'utilizzo di TDD / BDD ma anche allora non è universale. Il quadro è probabilmente meno importante che applicare la pratica in primo luogo.

Credo che Minitest è la sostituzione 1.9 per Test :: Unit, che esiste solo come un wrapper per la nuova libreria per la compatibilità all'indietro. Direi che prendere la via specifica per Minitest sarebbe più lungimirante.

RSpec è un introito un po 'diversa: meno ovviamente infuso dai quadri "tradizionali" xUnit-influenzato. Vale la pena spendere un po 'di tempo con per vedere se lo preferite.

C'è anche Shoulda . anche se non so come testata è su 1.9:. è più di un wrapper / estensione per Test :: Unit, quindi è probabilmente il lavoro, anche se

Naturalmente il divertimento non si ferma qui: una volta che hai scelto un framework di test che si sta andando a voler un motore beffarda di qualche tipo. O una sostituzione apparecchio di dati.

In tutti i casi, direi qualsiasi quadro per il quale si possono trovare le prove di aggiornamenti regolari, una comunità popolata aperta e un'API che non odi farà il lavoro. E 'improbabile che si sta andando ad essere abbattuto in seguito di aver fatto qualsiasi scelta che fai.

Altri suggerimenti

Sono stato utilizzando Rspec per un anno o giù di lì. Sono passato da Test :: Unit proprio perché ho potuto stampare in modo leggibile ciò che è in fase di test.

Si legge come prosa. Che è grande vantaggio per me. Ma, come con risultati tutto varierà.

describe Model do
  it "should do what I want" do
    this.should == that
    it.should be_nil
    that.should_not be_true
  end
end 

reguardless anche di framework di test si dovrebbe anche pensare a uno strumento di copertura come Rcov . Si integra con RSpec e vi dirà dove manca il codice di prova.

RSpec è il consenso di popolari libri Rails come "The Way Rails". Pro IMHO sono test che si leggono come inglese, formati di output che si leggono come inglese, e matchers on-the-fly. Contro sono a bassa velocità e la biblioteca si sente a volte "magico" vale a dire troppo estraneo a programmatori che sono più familiarità con Ruby e test di unità. RSpec offre anche cetriolo e cetriolino, che sono modi di scrivere le storie degli utenti che sono utili accettazione del cliente.

MINITEST è integrato in Ruby 1.9. Pro IMHO sono la velocità veloce, molto facile da leggere / scrivere per i codificatori di altre lingue, e le prove che utilizzano più o meno lo stesso stile di codice devi usare nel codice reale. MINITEST ha molto più della maggior parte delle persone sanno, per esempio MINITEST Spec ha BDD matchers simile a RSpec, MINITEST Mock è un sistema beffardo, e MINITEST benchmark ha profiling delle prestazioni.

Nella mia esperienza personale, persone che costruiscono applicazioni Rails tendono verso RSpec, e le persone che costruiscono codice Ruby puro tendono verso MINITEST Unità, Spec, Mock, Benchmark, e così via.

Io personalmente perfer RSpec. Ho scoperto che il mio test di messa a fuoco sul comportamento mi ha aiutato ad andare in giro quello che stavo cercando di fare.

Con rspec andare a prendere qualcosa come Factory Girl o senza sonno per generare i vostri dati di test, non utilizzare dispositivi.

Per quanto riguarda quello che Mike ha detto, il progetto RSpec è abbastanza attivo con le nuove versioni di essere rilasciato normalmente con ogni versione di rotaie per aiutarlo a tenere il passo con lo sviluppo del quadro.

RSpec è bello, ma credo che di recente c'è stato un gran parlare e movimento dietro Minitest che viene con Ruby 1.9.x. Ha un sacco di sottigliezze di RSpec, ma è molto più snella ed e conciso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top