Hemos llegado a un punto en el que nos hemos dado cuenta de que hay dos opciones para especificar los datos de prueba cuando se define un escenario típico de CRUD:¿Deben los escenarios BDD incluir datos de prueba reales o simplemente describirlos?
Opción 1: describir los datos a utilizar, y dejar que la aplicación define el datos
Scenario: Create a region
Given I have navigated to the "Create Region" page
And I have typed in a valid name
And I have typed in a valid code
When I click the "Save" button
Then I should be on the "Regions" page
And the page should show the created region details
Opción 2: explícitamente indican los datos de prueba a utilizar
Scenario: Create a region
Given I have navigated to the "Create Region" page
And I have filled out the form as follows
| Label | Value |
| Name | Europe |
| Code | EUR |
When I click the "Save" button
Then I should be on the "Regions" page
And the page should show the following fields
| Name | Code |
| Europe | EUR |
En términos de bene ajustes y desventajas, lo que hemos establecido es que:
La opción 1 cubre muy bien el caso cuando cambia la definición de decir un "nombre válido". Esto podría ser más difícil de tratar si optamos por la Opción 2, donde los datos de prueba se encuentran en varios lugares. La Opción 1 describe explícitamente lo que es importante acerca de los datos para esta prueba, especialmente si fuera un escenario en el que dijéramos algo como "ha escrito un número de tarjeta de crédito no válido". También "se siente" más abstracto y BDD de alguna manera, estando más preocupado con la descripción que con la implementación.
Sin embargo, la Opción 1 utiliza pasos muy específicos que serían difíciles de reutilizar. Por ejemplo, "la página debe mostrar los detalles de la región creada" probablemente solo sea utilizada por este escenario. Por el contrario, podríamos implementar la opción 2 "la página debe mostrar los siguientes campos" de forma que pueda ser reutilizada muchas veces por otros escenarios.
También creo que la opción 2 parece más amigable para el cliente, ya que pueden ver con el ejemplo lo que está sucediendo en lugar de tener que interpretar términos más abstractos como "válido". ¿Sería la Opción 2 más frágil? Refactorizar el modelo puede significar romper estas pruebas, mientras que si los datos de prueba están definidos en código, el compilador nos ayudará con los cambios del modelo.
Agradezco que no haya una respuesta correcta o incorrecta aquí, pero me gustaría escuchar las opiniones de las personas sobre cómo decidirían cuál usar.
Gracias!
Buen blog Cheezy y una gran idea, ¡gracias! –
FYI mi empleador ha bloqueado su sitio debido a un supuesto riesgo de seguridad. – onedaywhen