2012-02-01 18 views
5

Qualcuno sa di un modo per ottenere questo o pensa che sia una buona idea. Per avere una sintassi in stile OR in Gherkin per ridurre la ripetizione ma mantenendo la leggibilità umana (si spera). Sto pensando ai casi in cui le combinazioni di clausole vengono espanse con ogni combinazione di più istruzioni OR. per esempio.Sintassi "OR" Gherkin per ridurre la ripetizione con BDD

Scenario: TestCopy 
    Given Some text is selected 
    When The user presses Ctrl + C 
    OR the user right clicks and selects copy 
    OR the user selects Edit + Copy 
    Then the text is copied to the clipboard 

Questo verrebbe eseguito come 3 test ciascuno con lo stesso dato e quindi ma con uno Quando dal set OR. Immagino che questo avrebbe potuto essere raggiunto usando un modello con un segnaposto per la clausola di When, ma penso che questo sia più leggibile e potrebbe permettere che l'OR venga usato anche in Given per produrre n x m test. Con lo schema avresti ancora bisogno di n x m righe.

  • C'è un modo migliore per fare questo
  • è meglio la pratica di copiare e incollare in modo esplicito (sto pensando di manutenzione potrebbe essere un casino)
  • fare altri framework supportano questa (credo con FIT voi potrebbe scrivere un tavolo personalizzato ma ancora una volta questo sembra sovraccarico)

Grazie.

+0

Abbiamo pensato a noi stessi. Gherkin + – mcintyre321

risposta

9

Non è consigliabile utilizzare questo livello di dettaglio (premendo questi tasti, facendo clic con il pulsante destro del mouse) sugli scenari. Questo li rende, come ti rendi conto, lunghi e ripetitivi. Inoltre, di solito non sono le informazioni che le parti interessate avrebbero bisogno o vogliono comunque.

Il migliore sarebbe nascondere i dettagli di implementazione nelle definizioni di passaggio. Lo scenario dovrebbe essere qualcosa del tipo:

Scenario: TestCopy 
    Given some text is selected 
    When the user copies the selected text 
    Then the selected text is copied to the clipboard 

E i diversi modi di copiare il testo andrebbero alla definizione del terzo passo.

+1

Completamente d'accordo con @Marcelo qui! Non scrivere su COME il sistema è implementato al fine di realizzare ciò che l'utente ha bisogno. Prova a trovare un concetto di livello superiore come "l'utente copia il testo selezionato" sopra. Molto meglio! –

+0

@MarcusHammarberg Anche a me è stato insegnato a scrivere scenari usando "Cosa" al contrario di "Come". Tuttavia, se c'è più di un modo per eseguire un'azione in un sistema (in questo caso copia del testo), allora come dovrebbero essere testate queste diverse opzioni usando SpecFlow? Quindi perché penso che avere un test che itera attraverso le diverse opzioni sembra giusto. –

11

È possibile generatd più test da uno scenario con Scenario Outlines:

Scenario Outline: TestCopy 
    Given Some text is selected 
    When <Copy operation executed> 
    Then the text is copied to the clipboard 

Examples: 
    | Copy operation executed    | 
    | The user presses Ctrl + C    | 
    | the user right clicks and selects copy | 
    | the user selects Edit + Copy   | 

In un Scenario Outline che, fondamentalmente, crea un modello che viene riempito in con l'apposita Examples.
Per l'Nell'esempio precedente Specflow genererà 3 prove con lo stesso Given e Then e con le 3 diverse When s:

When The user presses Ctrl + C 
When the user right clicks and selects copy 
When the user selects Edit + Copy 
4

Per quanto riguarda il NXM scenario, mi sento come che quando si vuole fare quello, probabilmente ti stai sbagliando.

Non ha dato un esempio esplicito, ma supponiamo che si desidera qualcosa di simile:

Given A block of text is selected 
OR An image is selected 
OR An image and some text is selected 
When The user presses Ctrl + C 
OR the user right clicks and selects copy 
OR the user selects Edit + Copy 

scrivere il tuo clausola Then sarà un incubo.

Invece, prova due test ... prima, come suggerito da @nemesv - ma con "selezione del testo" sostituita da una "selezione" generica.

Scenario Outline: TestCopy 
    Given I have made a selection 
    When <Copy operation executed> 
    Then my selection is copied to the clipboard 

Examples: 
    | Copy operation executed    | 
    | The user presses Ctrl + C    | 
    | the user right clicks and selects copy | 
    | the user selects Edit + Copy   | 

È quindi possibile scrivere uno o più test per affrontare "ciò che rende una selezione valida" - e questo probabilmente da una funzione che si utilizza indipendente la funzione di copia - per esempio, che cosa succede quando fai una selezione e premi cancella ... o ctrl-v ... o trascina e rilascia?

Non si vuole percorrere la strada di moltiplicare tutti i modi validi di effettuare una selezione contro tutte le azioni valide che si possono intraprendere quando ne hai una.

0

direi che copiare e incollare consiste essenzialmente nel fare più chiamate allo stesso metodo. stai usando le stesse definizioni di passo, quindi perché non chiamarle più volte. copia/incolla, per me, realizza ciò che desideri.