2012-02-01 11 views
5

¿Alguien sabe de una manera de lograr esto o cree que es una buena idea? Tener una sintaxis de estilo OR en Gherkin para reducir la repetición pero manteniendo la legibilidad humana (con suerte). Estoy pensando en casos en los que las combinaciones de cláusulas se expanden con cada combinación de múltiples instrucciones OR. p.ej.Sintaxis Gherkin "OR" para reducir la repetición 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 

Esto se ejecutará como 3 pruebas cada una con el mismo dado y luego, pero con una Cuando desde el conjunto OR. Supongo que esto podría haber sido logrado usando una plantilla con un marcador de posición para la cláusula When, pero creo que es más legible y podría permitir que el OR sea utilizado también en las pruebas Given para producir n x m. Con el esquema aún necesitaría n x m filas.

  • ¿Hay una mejor manera de hacer esto
  • ¿Es mejor la práctica de copiar y pegar de forma explícita (estoy pensando en el mantenimiento podría causar problemas)
  • ¿Hay otros marcos apoyan esta (creo que con FIT podría escribir una tabla personalizada, pero de nuevo esto parece una sobrecarga)

Gracias.

+0

Acabamos de idear esto nosotros mismos. Gherkin + – mcintyre321

Respuesta

9

No se recomienda utilizar este nivel de detalle (presionar estas teclas, hacer clic con el botón derecho) en los escenarios. Esto los hace, como comprenderán, largos y repetitivos. Además, generalmente esa no es la información que las partes interesadas necesitarían o querrían de todos modos.

Lo mejor sería ocultar los detalles de implementación en las definiciones de pasos. Su escenario sería algo así como:

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

Y las diferentes formas de copiar el texto irían a la definición del 3er paso.

+1

Totalmente de acuerdo con @Marcelo aquí! No escriba sobre CÓMO se implementa el sistema para lograr LO QUE el usuario necesita. Intente encontrar un concepto de nivel superior como el "usuario copia el texto seleccionado" arriba. ¡Mucho mejor! –

+0

@MarcusHammarberg A mí también me han enseñado a escribir escenarios usando "Qué" en lugar de "Cómo". Sin embargo, si hay más de una forma de ejecutar una acción en un sistema (en este caso, copiando texto), ¿cómo deberían probarse estas diferentes opciones utilizando SpecFlow? Por lo tanto, creo que tener una prueba que itere a través de las diferentes opciones parece correcta. –

11

Puede generatd múltiples pruebas de un escenario 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   | 

En un Scenario Outline que, básicamente, crear una plantilla que se llena en el proporcionado con el Examples.
Para el ejemplo anterior Specflow generará 3 pruebas con el mismo Given y Then y con las 3 diferentes When s:

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

En cuanto a la nxm escenario, me siento como que cuando se quiere hacer eso, probablemente estás jugando mal.

usted no dio un ejemplo explícito, pero supongamos que desea algo como:

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 

la escritura de su cláusula de Then será una pesadilla.

En su lugar, pruebe dos pruebas ... primero, como lo sugiere @nemesv - pero con "selección de texto" reemplazado por una "selección" genérica.

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   | 

A continuación, puede escribir uno o más ensayos adicionales para hacer frente a "lo que hace que una selección válida" - y esto probablemente por una característica que utilizar independiente de la función de copia - por ejemplo, lo sucede cuando haces una selección y presionas borrar ... o ctrl-v ... o arrastras y sueltas?

No desea ir por el camino de multiplicar todas las formas válidas de hacer una selección contra todas las acciones válidas que puede tomar cuando tenga una.

0

Yo diría que copiar y pegar es básicamente hacer múltiples llamadas al mismo método. está utilizando las mismas definiciones de paso, entonces ¿por qué no simplemente las llama varias veces? copiar/pegar, para mí, logra lo que quieres.

Cuestiones relacionadas