Ultimamente sembra che Cucumber abbia ottenuto un maggiore supporto nella comunità di Rails. Ecco l'argomento in poche parole che ho sentito da un'intervista con il protagonista di RSpec (da un vecchio Ruby su Rails Podcast).
Nella comunità agile (al momento) c'è stata una grande spinta per Test Driven Development con l'enfasi sul test prima di dimostrare che dovevi cambiare qualcosa. C'era qualcosa di filosoficamente sbagliato in questo. In sostanza, i test sono un modo per verificare che la tua implementazione sia corretta, quindi come pensi in modo diverso sul design di guida? Il lead di RSpec supponeva che tu specificassi per primo, e non sarebbe fantastico se la specifica controllasse anche i risultati della tua implementazione?
La semplice ridenominazione assert
a should
aiuta a focalizzare la mente in modo corretto secondo le specifiche di scrittura, e pensare a design. Tuttavia, questa è solo una parte dell'equazione.
Ancora più importante, dal momento che molti beleiver TDD sostenevano che i test documentavano il progetto, la maggior parte della documentazione era nella migliore delle ipotesi scarsa. I test sono abbastanza opachi per i non sviluppatori che non hanno familiarità con la lingua. Anche allora, il design non è immediatamente evidente dalla lettura della maggior parte dei test.
Quindi, come obiettivo secondario, RSpec ha escogitato un modo per generare documentazione scritta dalle specifiche. È questa specifica scritta che offre a RSpec un vantaggio rispetto al semplice Test :: Unit per guidare la progettazione di un'applicazione. Perché scrivere qualcosa più di una volta quando è possibile documentare e verificare la coerenza del progetto allo stesso tempo?
La mia comprensione è che Cucumber, che ha avuto il vantaggio di venire più tardi e apprendere lezioni da RSpec, fa un lavoro migliore di questo obiettivo secondario senza perdere l'obiettivo primario (capacità di testare l'implementazione dalle specifiche). Cucumber lo fa con un'API abbastanza inglese come i non programmatori possono ragionevolmente grok. Potrebbero aver bisogno dell'aiuto dei programmatori per compilare alcune definizioni di nuovi metodi di verifica, ma è progettato per essere estensibile.
In conclusione, RSpec / Cucumber non dovrebbe sostituire del tutto il test unitario. Possono essere più adatti a documentare e verificare il tuo progetto, ma ci sono ancora diversi test di implementazione che devono ancora essere fatti, in particolare con bug sottili che derivano dall'implementazione e non dal design dell'applicazione. Tuttavia, riduce il numero di test che devi scrivere.