Skip to content

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:

Partes de los feature:

  • 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".

Ejemplo

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
Clone this wiki locally