-
Notifications
You must be signed in to change notification settings - Fork 7
Entendiendo los dos niveles de abastracción en Gherkin
María Galbis edited this page Jan 31, 2025
·
4 revisions
Al hacer la fusión de dos .feature
separados en definición e implementación se produce lo siguiente:
- Característica: Se usará el título de la definición. Si la implementación tiene otro título, se desechará.
-
Descripción de la característica: Se podría hacer una concatenación de ambas descripciones, si las hubiera, con un separador entre las dos, por ejemplo con un "---------". De esta manera, al volver a guardarlas como
.feature
, se pondría cada descripción en su correspondiente fichero. - Background: Sólo estará en la implementación. En la definición no debería estar.
- Escenario: Se usará el título de la definición. Si la implementación tiene otro título, se desechará.
-
Descipción del escenario: Se podría hacer una concatenación de ambas descripciones, si las hubiera, con un separador entre las dos, por ejemplo con un "---------". De esta manera, al volver a guardarlas como
.feature
, se pondría cada descripción en su correspondiente fichero. - Paso: El paso de la definición es un agregador de pasos de la implementación. La distribución de los mismos se indica mediante el comentario sobre el escenario de la implementación "redefinition.stepMap".
Tenemos el siguiente .feature
de definición:
@definition
Feature: El título de una característica
Decripción larga de la característica en la parte de definición
@ID-01
Scenario: Primer escenario
Descipción larga del primer escenario en la parte de definición
Given que existe un usuario
When se elimina el usuario
Then el usuario no existe en el sistema
@ID-02
Scenario: Segundo escenario
Descipción larga del segundo escenario en la parte de definición
Given que no existe un usuario
When se intenta eliminar el usuario
Then se obtiene un error en el sistema indicando que no existe
Y tenemos el siguiente .feature
de implementación:
@implementation
Feature: El título diferente de una característica
Decripción larga de la característica en la parte de implementación
Background:
Given el servicio REST '/ejemplo/{id}'
@ID-01
# redefinition.stepMap: 2-1-2
Scenario: Primer escenario abc
Descipción larga del primer escenario en la parte de implementación
Given el parámetro de ruta 'id' con el valor '30'
And que se ejecuta el script SQL del fichero 'data/users.sql'
When se elimina el usuario
Then el código de respuesta HTTP es 204
And el usuario identificado por '30' no existe en la tabla owners
@ID-02
# redefinition.stepMap: 1-1-1
Scenario: Segundo escenario cba
Descipción larga del segundo escenario en la parte de implementación
Given el parámetro de ruta 'id' con el valor '2000'
When se elimina el usuario
Then el código de respuesta HTTP es 404
Al funsionar ambos .feature
, se generaría el siguiente resultado:
Feature: El título de una característica
Decripción larga de la característica en la parte de definición
-------
Decripción larga de la característica en la parte de implementación
Background:
Given el servicio REST '/ejemplo/{id}'
@ID-01
Scenario: Primer escenario
Descipción larga del primer escenario en la parte de definición
-------
Descipción larga del primer escenario en la parte de implementación
Given que existe un usuario
Given el parámetro de ruta 'id' con el valor '30'
And que se ejecuta el script SQL del fichero 'data/users.sql'
When se elimina el usuario
When se elimina el usuario
Then el usuario no existe en el sistema
Then el código de respuesta HTTP es 204
And el usuario identificado por '30' no existe en la tabla owners
@ID-02
Scenario: Segundo escenario
Descipción larga del segundo escenario en la parte de definición
-------
Descipción larga del segundo escenario en la parte de implementación
Given que no existe un usuario
Given el parámetro de ruta 'id' con el valor '2000'
When se intenta eliminar el usuario
When se elimina el usuario
Then se obtiene un error en el sistema indicando que no existe
Then el código de respuesta HTTP es 404