2012-09-18 12 views
47

Ho appena visto uno Railscast per Minitest.Minitest e Rspec

Quali sono i pro e i contro per l'utilizzo di RSpec vs Minitest per testare un'app per rails? Quali funzionalità perderò la conversione da RSpec a Minitest?

+0

Vedere ad es. http://stackoverflow.com/questions/8423227/migrating-from-rspec-to-minitestspec – matt

+0

Forse queste due domande dovrebbero essere unite, esiste un modo per unire le domande? –

+10

Chiuso con +12 voti !!! votando per aprire. –

risposta

69

Sono uno degli sviluppatori di RSpec e non ho mai usato il minitest, quindi prendi in considerazione i miei pregiudizi leggendo questa risposta.

In linea di massima, il potere di RSpec deriva dal fatto che esso reifica tanti concetti di test in oggetti di prima classe. Dove Test :: Unit e Minitest usano metodi semplici per fare asserzioni, RSpec usa oggetti matcher di prima classe che supportano negazione, auto-descrizione e altro. Gli esempi di RSpec sono oggetti di prima classe che supportano ricchi metadati; minitest/spec compila it blocca in metodi semplici, che non supportano lo stesso tipo di metadati ricchi. RSpec supporta la specifica dei comportamenti condivisi usando un costrutto di prima classe (gruppi di esempio condivisi) che accetta argomenti; w/minitest puoi usare inheritance or a mixin to re-use tests, ma non ha lo stesso tipo di supporto di prima classe. RSpec ha una API di formattazione esplicita (e ci sono molti programmi di formattazione di terze parti che la usano); Non sono a conoscenza del fatto che Minitest abbia lo stesso tipo di API di formattazione di prima classe.

Come qualcuno che esegue costantemente test e pratica TDD tutto il giorno, trovo che la potenza RSpec mi dà molto utile. Molte persone lo trovano comunque eccessivo e c'è un costo cognitivo aggiunto alle astrazioni extra.

Qui sono alcune caratteristiche specifiche RSpec ha che credo Minitest manca:

  • before(:all) ganci (notare questa è una caratteristica power user di RSpec che deve essere utilizzato raramente; ho usato solo su pochi occasioni in molti anni di utilizzo RSpec)
  • around(:each) ganci
  • condivisi esempio gruppi
  • Shared contesti
  • supporto dei metadati Rich che può essere u sed per controllare quali esempi vengono eseguiti, quale gruppo di esempi include i contesti condivisi, quali gruppi di gruppi di esempio vengono mescolati e altro ancora.
  • Supporto integrato per una vasta gamma di funzioni di simulazione con rspec-mock; Minitest :: Mock è molto più semplice e più limitato in confronto.
  • RSpec ha rspec-fire, che è fantastico.

vantaggi dell'utilizzo di Minitest:

  • E 'costruito nella libreria standard in modo che non è necessario installare nulla in più.
  • Può essere utilizzato negli stili def test_blah o it 'blah'.
  • Il codice base è molto piccolo e semplice. RSpec, in virtù della sua età avanzata e delle funzionalità aggiuntive, è più grande in confronto.
  • Carichi minimi più veloci di RSpec (si tratta di circa 4 file di codice rispetto a RSpec con molti file distribuiti su 3 gem), ma si noti che RSpec non è affatto lento; in molti dei miei progetti in questi giorni, ricevo feedback di prova da RSpec in meno di un secondo (e spesso in meno di 500 ms).

Nel complesso, è un po 'come Sinatra vs Rails, e penso che Minitest e RSpec siano entrambe scelte ottimali a seconda delle esigenze.

Un'ultima cosa: se ci sono aspetti specifici di Minitest che ti piacciono di più, ma altre cose che ti piacciono di più su RSpec, possono essere facilmente mixate e abbinate. I wrote a blog post about this, se sei interessato.

+0

Grazie per la spiegazione sorprendente. –

+2

Ricorda a Boris che se desideri integrare MiniTest con Spork, Guard, Capybara e qualsiasi tipo di driver Javascript, puoi pianificare di trascorrere un'intera settimana cercando di capirlo e renderlo stabile. MiniTest non è pronto per l'uso in primetime quando si tratta di avere uno stack di test completo per tutto tranne che per le applicazioni Rails più rudimentali. Ho dato a me il vecchio college per provare me stesso, ma è appena finito per la frustrazione. – AKWF

4

Mi sono convertito in stile minit dallo stile Test/Unit con shoulda e vale la pena. Elimina il boilerplate e dicono che migliora anche la velocità. Non ho mai veramente usato RSpec. Invece, ho scritto il mio primitivo test e la struttura di derisione (solo allo scopo di comprendere il beffardo, l'ho abbandonato al passaggio a Minitest). Penso che lo stub/mocking in RSpec potrebbe essere più avanzato, quindi se lo hai già imparato, continua a usarlo. Altrimenti, segui Minitest, che ti consentirà di collaborare con persone ignoranti di RSpec, come me.

Problemi correlati