2013-10-31 9 views
8

Sto creando uno scenario Delineare simile a quello seguente (si tratta di una versione semplificata, ma dà una buona indicazione del mio problema):Multi Scenario dimensionale delinea in Specflow

Given I have a valid operator such as 'MyOperatorName' 
    When I provide a valid phone number for the operator 
    And I provide an '<amount>' that is of the following '<type>' 
    And I send a request 
    Then the following validation message will be displayed: 'The Format of Amount is not valid' 
    And the following Status Code will be received: 'AmountFormatIsInvalid' 

Examples: 
    | type  | description      | amount | 
    | Negative | An amount that is negative  | -1.0 | 
    | Zero  | An amount that is equal to zero | 0  | 
    | ......... | ..........      | .... | 

La tabella Esempi fornisce la prova i dati che ho bisogno, ma vorrei aggiungere un altro tavolo Esempi con solo i nomi degli operatori (invece di MyOperatorName) al fine di replicare le prove per i diversi operatori

Examples: 
    | operator | 
    | op_numb_1 | 
    | op_numb_2 | 
    | op_numb_3 | 

al fine di evitare di ripetere lo stesso schema scenario di tre volte ; So che questo non è possibile ma mi chiedo quale sia l'approccio migliore per evitare di utilizzare tre diversi contesti di scenario all'interno della funzione che sono praticamente gli stessi a parte il nome dell'operatore. So che posso riutilizzare le stesse definizioni di passo, ma sto cercando di capire se esiste una buona pratica per evitare di ingombrare la funzionalità con scenari troppo simili.

risposta

8

Felice di sapere che questo non è possibile ... Quindi quali opzioni ci sono? sembra che ci sono 5:

una: fare una tabella con ogni opzione (il prodotto vettoriale)

Examples: 

| type  | description      | amount | operator | 
| Negative | An amount that is negative  | -1.0 | op_numb_1 | 
| Zero  | An amount that is equal to zero | 0  | op_numb_1 | 
| Negative | An amount that is negative  | -1.0 | op_numb_2 | 
| Zero  | An amount that is equal to zero | 0  | op_numb_2 | 
| ......... | ..........      | .... | ...  | 

b. Ripeti lo scenario per ogni operatore, con una tabella di righe di input - ma hai detto che non volevi farlo.

c. Ripeti lo scenario per ogni riga di input, con una tabella di operatori - Mi piace questa opzione, perché ogni regola è un test separato. Se davvero, vuoi davvero assicurarti che ogni diversa implementazione della tua strategia "operatore" passi e fallisca negli stessi scenari di validazione, allora perché non scrivere ogni scenario di validazione come una singola Scenario: ad es.

Scenario Outline: Operators should fail on Negative inputs 
Given I have a valid operator such as 'MyOperatorName' 
When I provide a valid phone number for the operator 
And I send a request with the amount "-1.0" 
Then the following validation message will be displayed: 'The Format of Amount is not valid' 
And the following Status Code will be received: 'AmountFormatIsInvalid' 

Scenario Outline: Operators should fail on Zero inputs 
...etc... 

d. Ripensa come stai usando Specflow - se hai solo bisogno di esempi KEY per illustrare le tue caratteristiche (come descritto da Specification by Example di Gojko Adzic), allora stai esagerando controllando ogni combinazione. Se tuttavia stai usando specflow per automatizzare la tua suite completa di test di integrazione, i tuoi scenari potrebbero essere appropriati ... ma potresti voler pensare a e.

e. Scrivi test di integrazione/unità basati sull'idea che la logica di convalida "operatore" è applicata solo in un punto. Se la convalida è la stessa su ciascun operatore, perché non provarla una sola volta e poi far ereditare tutti gli operatori o includere nella loro composizione la stessa classe di validatori?

+1

Per essere corretti, il 'Quando fornisco un numero di telefono valido per l'operatore' è una specie di superfluo in opzione c. - potresti scrivere 'Quando invio una richiesta con un numero di telefono valido e l'importo" -1.0 "'. – perfectionist

+2

Bella risposta, sicuramente sarei il secondo @perfezionista e ti spingerò verso il basso l'opzione d. Semplice esempio di scelta per arricchire i test, non testando in modo esauriente ogni possibile combinazione. Se hai bisogno di test approfonditi, collega qualcosa che può generare test combinatori (vedi mbUnit) o ​​forse solo un'app console che ri-usa i tuoi attacchi Specflow ... – AlSki

+0

Grazie a @perfectionist, apprezzo molto la tua risposta; è sicuramente completo ed esaustivo. –

Problemi correlati