BDD aggiunge un ciclo attorno al ciclo TDD.
Quindi inizi con un comportamento e lascia che guidi i tuoi test, quindi lascia che i test guidino lo sviluppo. Idealmente, BDD è guidato da una sorta di test di accettazione, ma non è necessario al 100%. Finché hai definito il comportamento previsto, stai bene.
Quindi, diciamo che stai scrivendo una pagina di accesso.
Inizia con il percorso felice:
Given that I am on the login page
When I enter valid details
Then I should be logged into the site
And shown my default page
La sintassi Given-And-When-And-Then-And è comune nello sviluppo basato sul comportamento. Uno dei vantaggi di questo è che può essere letto (e, con formazione, scritto) da non-sviluppatori - cioè, i tuoi stakeholder possono visualizzare l'elenco di comportamenti che hai definito per il completamento di un compito con successo e vedere se esso corrisponde alle loro aspettative molto prima che tu rilasci un prodotto incompleto.
Esiste un linguaggio di scripting, noto come Gherkin, che assomiglia molto a quanto sopra e consente di scrivere codice di test dietro le clausole di questi comportamenti. Dovresti cercare un traduttore basato su Gherkin per il tuo normale framework di sviluppo. Questo è fuori dallo scopo di questa risposta.
Comunque, torniamo al comportamento. La tua attuale applicazione non lo fa ancora (se lo fa allora perché qualcuno richiede una modifica?), Quindi stai fallendo questo test, sia che tu stia utilizzando un test runner o semplicemente test manualmente.
Quindi ora è il momento di passare al ciclo TDD per fornire quella funzionalità.
Sia che tu stia scrivendo BDD o meno, i tuoi test dovrebbero essere nominati con una sintassi comune. Uno dei più comuni è la sintassi "dovrebbe" che hai descritto.
Scrivi un test: ShouldAcceptValidDetails. Passa attraverso il ciclo Red-Green-Refactor fino a quando non sei soddisfatto. Ora passiamo il test del comportamento? In caso contrario, scrivere un altro test: ShouldRedirectToUserDefaultPage. Red-Green-Refactor fino a che sei felice. Lavare, risciacquare, ripetere fino a soddisfare i criteri stabiliti nel comportamento.
E poi passiamo al comportamento successivo.
Given that I am on the login page
When I enter an incorrect password
Then I should be returned to the login page
And shown the error "Incorrect Password"
Ora non avresti dovuto anticiparlo per passare il tuo comportamento precedente. Dovresti fallire questo test a questo punto. Quindi torna al tuo ciclo TDD.
E così via fino alla tua pagina.
Consiglia caldamente Il libro Rspec per saperne di più su BDD e TDD, anche se non lo sei uno sviluppatore di Ruby.