RSpec vs Cucumber (storie di RSpec) [chiuso]


136

Quando dovrei usare le specifiche per l'applicazione Rails e quando Cucumber (ex rspec-stories)? So come funzionano e utilizzano attivamente le specifiche, ovviamente. Ma è ancora strano usare Cucumber. La mia opinione attuale su questo, è che è conveniente usare Cucumber quando si implementa un'applicazione per il client e non capisco come dovrebbe funzionare l'intero sistema.

Ma cosa succede se sto facendo il mio progetto? Per la maggior parte del tempo, so come interagiscono le parti del sistema. Tutto quello che devo fare è scrivere un sacco di test unitari. Quali sono le possibili situazioni in cui avrei bisogno di Cetriolo allora?

E, come seconda domanda corrispondente: devo scrivere le specifiche se scrivo storie su Cetriolo? Non sarebbe un doppio test della stessa cosa?


12
Come mai ogni singola domanda [chiusa] che mi viene in mente viene chiusa come "non costruttiva" da Bill the Lizard E allo stesso tempo la domanda viene votata molte volte!?! cosa mi sto perdendo?
Ashkan Kh. Nazary,

4
Sono totalmente d'accordo. Sono ancora molto confuso su dove pubblicare domande come "qual è la migliore pratica per fare XXX".
Decano del

3
Sono d'accordo, mi imbatto in buone domande con risposte perspicaci e utili tutto il tempo su SO che sono state chiuse per un motivo o per l'altro.
Russell Silva,

Ho trovato questa domanda nel 2017 perché è ancora pertinente, e ancora una grande domanda, con ottime risposte. Inoltre, non invita ad esprimere l'opinione poiché i quadri in questione sono stati progettati principalmente dalle stesse persone per due preoccupazioni completamente separate ... ma avresti bisogno di un po 'di esperienza per saperlo.
Lunivore,

Risposte:


114

Se non l'hai già fatto, potresti dare un'occhiata all'eccellente articolo di Dan North, What's in a Story? come punto di partenza.

Abbiamo due usi principali per le storie di Cucumber. Innanzitutto, poiché la forma della trama è molto specifica, aiuta a focalizzare l'articolazione del proprietario del prodotto sulle funzionalità che desidera creare. Questo è il "token per una conversazione" di utilizzo delle storie, e sarebbe utile se le storie fossero implementate o meno nel codice. In secondo luogo, quando il processo sta funzionando abbastanza bene da avere storie complete prima di iniziare a scrivere la funzione (più di un ideale per cui ci battiamo che una realtà quotidiana), hai i tuoi criteri di accettazione spiegati chiaramente e sai esattamente cosa e come molto da costruire.

Nel nostro lavoro su Rails, le storie di Cucumber non sostituiscono i test unitari rspec. I due vanno mano nella mano. In pratica, i test unitari tendono a guidare lo sviluppo dei modelli e dei controller e le storie tendono a guidare lo sviluppo delle viste (tendiamo a non scrivere rspec per le nostre opinioni) e forniscono un buon test dell'applicazione nel suo insieme dal prospettiva dell'utente.

Se lavori da solo, l'aspetto della comunicazione potrebbe non essere così interessante per te, ma potrebbe essere il test di integrazione che ricevi da Cucumber. Se usi Webrat , scrivere Cucumber può essere veloce e indolore per molte delle tue funzionalità di base.


6
Stai combinando due problemi separati; 1) è bene fare test di integrazione e accettazione, e 2) è il cetriolo un buon strumento per scrivere quei test. Per 1 - sì, è chiaramente una buona idea. Per 2, raramente è più efficiente per un team di sviluppo scrivere test in una lingua con così tanta indiretta, quando è possibile scrivere test di integrazione e accettazione molto leggibili in rspec e capybara (o - ci manchi il cielo potremmo indagare sulla libreria standard di Ruby - test / unit o minitest, insieme a capybara). Vedi il post che Jack Kinsella collega al di sotto.
Graham Ashton,

Totalmente d'accordo con te Abie! L'integrazione con i cetrioli è vitale!
dpapadopoulos,

26

Pensalo come un ciclo:

Scrivi la tua funzione Cetriolo, quindi mentre sviluppi i pezzi per quella funzione, scrivi le specifiche per completare i singoli componenti. Continua a completare le specifiche fino a quando non avrai scritto funzionalità sufficienti per il passaggio della funzione, quindi scrivi la funzione successiva.


1
C'è un bell'esempio del ciclo Outside-in BDD .
rdamborsky,

21

La mia opinione è che è una cattiva idea usare Cucumber nella maggior parte delle situazioni a causa dei costi di produttività che la sua sintassi comporta per te. Ho scritto ampiamente sull'argomento in Perché perdere tempo con i test sui cetrioli?


1
Ho letto il tuo articolo e come fan del cetriolo, devo dire che sono d'accordo con molti punti che citi nel tuo articolo. Tuttavia, penso ancora che il cetriolo sia un buon modo per formalizzare i test e renderli facilmente leggibili agli estranei.
huug,

1
Jack - post fantastico. Grazie mille per averlo scritto, mi hai risparmiato la fatica di farlo da solo.
Graham Ashton,

3
huug - Potrebbe essere un buon modo per esporre i test agli "outsider", ma tu mi mostri un membro del team non tecnico che vuole leggere i test e ti mostrerò un team che sta sprecando il suo budget. Inoltre, devo ancora lavorare con un membro non tecnico di un progetto che vorrebbe perdere tempo a leggere i test. Non lo so, forse sono fortunato ...
Graham Ashton,

Downvoted. Trovo che descrivere le funzionalità dell'utente in termini di utente sia utile per me come sviluppatore, indipendentemente dal fatto che gli utenti abbiano mai letto le mie storie di Cucumber. Ecco perché uso Cucumber in tutti i miei progetti e incoraggio gli altri a fare altrettanto.
Marnen Laibow-Koser,

8

Una storia di Cucumber è più una descrizione del problema generale che la tua applicazione sta risolvendo, piuttosto che se i singoli bit di codice funzionano (cioè test unitari).

Come descrive Abie, è quasi un elenco di requisiti che l'applicazione deve soddisfare ed è molto utile per la comunicazione con il cliente, oltre ad essere direttamente testabile.


2
Esattamente. Il cetriolo descrive l'utilizzo della tua applicazione. Ad esempio "Faccio clic qui e mi aspetto di ottenere questo o quel risultato". Le specifiche sono più a livello di 'modello'. Ad esempio, quando chiamo quei metodi con parametri simili, mi aspetto che restituisca questo risultato.
Ariejan,

6

Oggi puoi usare rspec con Capybara e Selenium Webdriver ed evitare di dover costruire e mantenere tutti i parser della storia di Cucumber. Ecco cosa consiglierei:

  1. Scrivi la tua storia
  2. Usando RSpec, vorrei creare un test di integrazione ex: spec / integrations / socks_rspec.rb
  3. Quindi vorrei creare un test di integrazione che includa una nuova descrizione e blocchi per ogni scenario
  4. Quindi implementerei le funzionalità minime necessarie per ottenere il test di integrazione e andando più a fondo (in controller e modelli, ecc.) TDD su controller e modelli.
  5. Al ritorno, il test di integrazione dovrebbe superare e puoi continuare ad aggiungere passaggi al test di integrazione
  6. ripetere

Una cosa da notare, tuttavia, è che i test del controller e dell'integrazione si sovrappongono e potrebbero non essere necessari, quindi è necessario utilizzare il proprio giudizio in modo da non perdere tempo.

Inoltre, una volta trovato il tuo groove troverai più divertente svilupparti usando BDD, fino ad allora non sentirti in colpa se non ti senti come se lo stessi facendo perfettamente e non ci pensi oltre. Farai alla grande!


2

Ma cosa succede se sto facendo il mio progetto? Per la maggior parte del tempo, so come interagiscono le parti del sistema. Tutto quello che devo fare è scrivere un sacco di test unitari. Quali sono le possibili situazioni in cui avrei bisogno di Cetriolo allora?

Hai ancora bisogno del cetriolo. Ne hai bisogno per documentare come vedi il sistema funzionare e ti serve per assicurarti di non aver rotto la funzionalità quando cambi le cose.

In altre parole, hai bisogno delle storie di Cetriolo per le stesse ragioni per cui hai bisogno di unit test: funzionano solo su un livello più alto di astrazione.


2
Non direi che Cucumber era essenziale, ma sicuramente dovresti avere una sorta di test di integrazione, poiché i test unitari vengono normalmente utilizzati solo per testare le classi in isolamento.
Andy Waite,

1
Destra. E nella maggior parte dei casi, Cucumber è il modo migliore per scrivere test di integrazione.
Marnen Laibow-Koser,
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.