Esquema del escenario y Ejemplos
En resumen: Cinco escenarios que se diferencian solo en el importe se convierten en un único Esquema del escenario con una tabla de Ejemplos: cada fila es un ejemplo distinto. Unos Antecedentes reúnen el comienzo común de todos los escenarios. Una Regla agrupa los ejemplos bajo la regla de negocio que muestran, como las tarjetas verdes bajo la azul.
Problema
Lo mismo cinco veces
Alguien describió el envío con cinco escenarios. Se diferencian solo en el importe: 30, 49,99, 50, 50,01 y 120 €. Por lo demás son idénticos, línea por línea.
Lees el archivo y tienes que comparar cinco bloques para ver qué es distinto. Y cuando el coste pasa a ser 5,90 €, corriges tres sitios y olvidas el cuarto.
La idea
Un esquema y ejemplos
Los escenarios que se diferencian solo en sus valores se convierten en un Esquema del escenario. En lugar de los valores hay nombres entre <>, y los valores están en una tabla de Ejemplos:
# language: esCaracterística: Envío gratis
Esquema del escenario: Envío de un pedido de <importe> € Dado un carrito de <importe> € Cuando hago el pedido Entonces el envío es de <envío> €
Ejemplos: | importe | envío | | 30,00 | 4,90 | | 49,99 | 4,90 | | 50,00 | 0,00 | | 120,00 | 0,00 |Cada fila de la tabla es un escenario distinto. Este esquema se ejecuta cuatro veces. Si falla, el informe dice qué fila de Ejemplos.
Ahora las diferencias se ven de un vistazo: una columna de importes y una columna de envío. La tabla se parece mucho a lo que escribe el dueño en un correo: «hasta 49,99 € pagas 4,90 €, desde 50 € nada».
Pruébalo
¿Qué fila?
Ejercicio
Un esquema para el envío
1. De copias a un esquema. El punto de partida son tres escenarios copiados.
Convierte los escenarios de 30 € y 50 € en un único Esquema del escenario con Ejemplos. Añade también las filas que cazan los últimos errores: la comprobación te dice dónde mirar.
Solución
Característica: Envío gratis
Esquema del escenario: Envío de un pedido de <importe> €
Dado un carrito de <importe> €
Cuando hago el pedido
Entonces el envío es de <envío> €
Ejemplos:
| importe | envío |
| 30,00 | 4,90 |
| 49,99 | 4,90 |
| 50,00 | 0,00 |
| 120,00 | 0,00 |
Escenario: Carrito vacío
Dado un carrito vacío
Cuando hago el pedido
Entonces el pedido se rechaza
Las dos filas nuevas son 49,99 € (un importe con céntimos justo por debajo del límite caza el redondeo a euros enteros) y un importe desde 100 € (caza la tarifa antigua para pedidos grandes). El carrito vacío queda como escenario aparte: no tiene envío, se rechaza.
La idea
Una tabla de datos
A veces un paso necesita varias filas de entrada. Por ejemplo, un carrito con varios productos:
# language: esCaracterística: El importe del carrito
Escenario: Un carrito con dos productos Dado un carrito con los productos: | producto | precio | cantidad | | Camiseta | 20,00 | 2 | | taza | 9,99 | 1 | Cuando hago el pedido Entonces el importe es de 49,99 €Esto es una tabla de datos. Es la entrada de un paso, y el escenario se ejecuta una vez. Los Ejemplos hacen lo contrario: repiten todo el escenario por cada fila.
El vocabulario de las tareas de aquí solo tiene pasos sencillos, así que la tabla de datos es solo para leer.
La idea
Antecedentes
Si todos los escenarios de un archivo empiezan igual, por ejemplo «el cliente ha iniciado sesión», ese comienzo puede pasar a unos Antecedentes. Sus pasos se ejecutan antes de cada escenario que hay debajo, como si estuvieran escritos en él.
# language: esCaracterística: Como mucho 10 unidades de un producto
Antecedentes: Dado un carrito con 9 unidades del producto
Escenario: La décima unidad se acepta Cuando añado 1 unidad Entonces en el carrito hay 10 unidades del producto
Escenario: Dos más se rechazan Cuando añado 2 unidades Entonces no se permite añadirTen cuidado con ellos. Quien lee el segundo escenario no puede ver dónde empieza sin volver arriba. Por eso unos antecedentes son cortos y contienen solo lo que de verdad es común.
La idea
Regla
En el Example Mapping las tarjetas azules son las reglas y las verdes los ejemplos que hay debajo. En Gherkin lo mismo se dice con la palabra clave Regla: debajo están los escenarios que la muestran.
# language: esCaracterística: Como mucho 10 unidades de un producto
Regla: En el carrito hay como mucho 10 unidades de un producto
Escenario: La décima unidad se acepta Dado un carrito con 9 unidades del producto Cuando añado 1 unidad Entonces en el carrito hay 10 unidades del producto
Regla: Se añade al menos 1 unidad
Escenario: Cero unidades no es añadir Dado un carrito con 5 unidades del producto Cuando añado 0 unidades Entonces no se permite añadirAhora el archivo dice no solo qué comprobamos, sino también por qué. Si un escenario falla, ves enseguida qué regla está rota. Cada regla puede tener sus propios antecedentes.
Ejercicio
El límite con reglas
2. Dos reglas. Las reglas están escritas, sin nada debajo.
Pon ejemplos bajo cada regla (con un esquema o con escenarios) para que se cacen los seis errores del límite.
Solución
Característica: Como mucho 10 unidades de un producto
Regla: En el carrito hay como mucho 10 unidades de un producto
Esquema del escenario: <hay> en el carrito, añado <añadir>
Dado un carrito con <hay> unidades del producto
Cuando añado <añadir> unidades
Entonces en el carrito hay <después> unidades del producto
Ejemplos:
| hay | añadir | después |
| 9 | 1 | 10 |
| 10 | 1 | 10 |
| 5 | 6 | 5 |
Regla: Se añade al menos 1 unidad
Antecedentes:
Dado un carrito con 5 unidades del producto
Esquema del escenario: Añado <añadir>
Cuando añado <añadir> unidades
Entonces no se permite añadir
Y en el carrito hay 5 unidades del producto
Ejemplos:
| añadir |
| 0 |
| -1 |
El límite superior se ve por los dos lados: 9 + 1 se acepta, 10 + 1 se rechaza. El caso 5 + 6 caza el sistema que cuenta solo las unidades que se añaden. Después de cada rechazo comprueba también cuántas unidades quedan: si no, nadie ve que el carrito se vació. El límite inferior también tiene dos lados: 0 unidades y una cantidad negativa son errores distintos.
Más precisamente, para curiosos
La referencia de Gherkin (Cucumber):
- «Rule» está en Gherkin desde la versión 6. Su finalidad es representar una regla de negocio que debe implementarse;
- «Scenario Outline» tiene un sinónimo, «Scenario Template». Puede haber varios Ejemplos bajo un mismo esquema, cada uno con su nombre, por ejemplo «Alrededor del límite» y «Lejos del límite»;
- hay unos antecedentes por característica o por regla. La referencia aconseja mantenerlos cortos: si pasan de 4 líneas, probablemente parte de los detalles pertenece a pasos de nivel más alto;
- además de una tabla de datos, un paso puede llevar también un texto más largo entre
"""(un doc string), por ejemplo el texto de un correo.
Elegir las filas de los Ejemplos es diseño de pruebas: clases de equivalencia y valores límite. Tienen su propio módulo más adelante. Por ahora la regla es: una fila de cada clase y una de cada lado de cada límite.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: Por qué fallan los programas · Criterios de aceptación · Example Mapping: reglas, ejemplos, preguntas · Dado, Cuando, Entonces
- Continúa en: Qué, no cómo · Escenarios malos · Documentación viva · Del escenario a los pasos
- Ejercicios sobre el tema: Escenarios con Gherkin