Siamo arrivati a un punto in cui ci siamo resi conto che ci sono due opzioni per specificare i dati di test quando si definisce un tipico scenario CRUD:Gli scenari BDD dovrebbero includere dati di test effettivi o semplicemente descriverli?
Opzione 1: descrivere i dati da utilizzare, e lasciare che l'attuazione definire il dati
Scenario: Create a region
Given I have navigated to the "Create Region" page
And I have typed in a valid name
And I have typed in a valid code
When I click the "Save" button
Then I should be on the "Regions" page
And the page should show the created region details
Opzione 2: esplicitamente affermano i dati di test da utilizzare
Scenario: Create a region
Given I have navigated to the "Create Region" page
And I have filled out the form as follows
| Label | Value |
| Name | Europe |
| Code | EUR |
When I click the "Save" button
Then I should be on the "Regions" page
And the page should show the following fields
| Name | Code |
| Europe | EUR |
In termini di bene calze e inconvenienti, quello che abbiamo stabilito è che:
L'opzione 1 copre bene il caso in cui la definizione di dire "nome valido" cambia. Questo potrebbe essere più difficile da gestire se optassimo con l'Opzione 2, in cui i dati del test si trovano in più punti. L'opzione 1 descrive esplicitamente ciò che è importante sui dati per questo test, specialmente se si tratta di uno scenario in cui dicevamo qualcosa come "ha inserito un numero di carta di credito non valido". Inoltre "sente" più astratto e BDD in qualche modo, essendo più interessato alla descrizione che all'implementazione.
Tuttavia, l'opzione 1 utilizza passaggi molto specifici che sarebbero difficili da riutilizzare. Ad esempio "la pagina dovrebbe mostrare i dettagli della regione creata" probabilmente verrà utilizzata solo da questo scenario. Viceversa, potremmo implementare la "pagina dovrebbe mostrare i seguenti campi" dell'opzione 2 in modo che possa essere riutilizzata molte volte da altri scenari.
Penso anche che l'opzione 2 appaia più adatta ai clienti, poiché possono vedere con l'esempio cosa succede invece di dover interpretare termini più astratti come "valido". L'opzione 2 sarebbe più fragile però? Rifattorizzare il modello potrebbe significare rompere questi test, mentre se i dati del test sono definiti in codice, il compilatore ci aiuterà con le modifiche del modello.
Apprezzo che non ci sarà una risposta giusta o sbagliata qui, ma vorrei sentire le opinioni della gente su come deciderebbero quale usare.
Grazie!
Bel blog Cheezy e una grande idea, grazie! –
FYI il mio datore di lavoro ha bloccato il tuo sito a causa di un presunto rischio per la sicurezza. – onedaywhen