Ir al contenido
wannacode

Dado, Cuando, Entonces

En resumen: Un escenario de Gherkin es un ejemplo escrito en tres pasos: Dado (de dónde partimos), Cuando (qué ocurre), Entonces (qué se ve). «Y» y «Pero» continúan el paso anterior. Un buen escenario pasa en el sistema correcto y falla en el sistema con un error, por eso aquí cada escenario se ejecuta contra los dos.

Problema

Un ejemplo, tres lecturas

En la sesión sobre el envío hay una tarjeta verde: «Un carrito de 50,00 €: el envío es gratis». Todos asienten.

Después cada uno lo anota a su manera. El dueño lo guarda en un correo. QA escribe una prueba en una hoja de cálculo. El programador añade una comprobación en el código. Un mes después alguien cambia la regla, y solo se corrige uno de los tres sitios.

Hace falta un único registro para todos: el dueño lo lee como una frase, y la computadora lo ejecuta como una prueba.

La idea

Un escenario en tres pasos

El ejemplo se escribe como un escenario en tres pasos:

  • Dado: de dónde partimos. Lo que hay antes de que pase nada;
  • Cuando: qué ocurre. La acción de la que trata el escenario;
  • Entonces: qué se ve. El resultado que se comprueba.
# language: es
Característica: Envío gratis
Escenario: Pedido de justo 50 €
Dado un carrito de 50,00 €
Cuando hago el pedido
Entonces el envío es gratis

El lenguaje se llama Gherkin. Las palabras al comienzo de cada línea son sus palabras clave. Característica es el título del archivo: aquello que describimos. Los escenarios van debajo, cada uno con su nombre.

El resto es texto normal. Por eso un escenario se lee como una frase: «Dado un carrito de 50 €, cuando hago el pedido, entonces el envío es gratis».

Pruébalo

¿Qué paso es?

1. «… un carrito de 49,99 €»
2. «… hago el pedido»
3. «… el envío es de 4,90 €»
4. «… el cliente es un cliente fiel»

La idea

«Y» y «Pero»

A veces el comienzo tiene dos partes, o hay dos comprobaciones. Entonces el paso siguiente empieza con Y o Pero:

# language: es
Característica: Envío gratis
Escenario: Pedido justo por debajo del límite
Dado un carrito de 49,99 €
Cuando hago el pedido
Entonces el pedido se acepta
Pero el envío es de 4,90 €

«Y» y «Pero» no son un tipo nuevo de paso. Toman el tipo del paso anterior: aquí «Pero» es una comprobación más. La diferencia entre los dos es solo para el lector. «Pero» dice «y aun así»: el pedido se acepta, pero el envío se paga.

La idea

Cómo se comprueba aquí un escenario

En las tareas escribes escenarios en un editor. Al lado está el vocabulario de pasos: las frases que el sistema entiende, como Dado un carrito de {importe} €. En lugar de {importe} escribes un número, por ejemplo 49,99. Un paso fuera del vocabulario no se puede ejecutar, y la comprobación te dice el más cercano.

Después los escenarios se ejecutan dos veces:

  1. Contra el sistema correcto. Aquí todos los escenarios tienen que pasar. Si uno falla, su expectativa es incorrecta: compruébala con la regla.
  2. Contra versiones con un error cada una. Cada una es la misma tienda con un defecto real: > en lugar de >= en 50 €, el coste equivocado, un carrito vacío al que se cobra. Una versión así se llama mutante. Un buen escenario falla en ella, es decir, la caza.

La respuesta suena así: «Los escenarios pasan en el sistema correcto y cazan 2 de 3 errores. Un error se escapa: con un carrito vacío». No dice qué escenario falta. Dice dónde mirar.

Ejercicio

Los primeros escenarios

1. Justo 50 €. El nombre del escenario ya está.

Termina el escenario para un pedido de justo 50,00 €: Dado, Cuando, Entonces.

GherkinEnvío gratis

2. Tres casos. El escenario de 50 € ya está.

Añade un escenario justo por debajo del límite (con «Pero» o «Y») y un escenario para un carrito vacío. Los tres escenarios tienen que cazar los tres errores.

GherkinEnvío gratis

La idea

Un escenario es un ejemplo

Mira lo que escribiste. Cada escenario es una tarjeta verde del Example Mapping, solo que escrita de modo que se pueda ejecutar. Juntos, los escenarios son los criterios de aceptación de la historia.

Por eso un buen escenario tiene números concretos. «Dado un pedido grande» no se puede ejecutar, y cada uno lo lee de forma distinta. «Dado un carrito de 50,00 €» se lee de una sola manera.

Más precisamente, para curiosos

ISTQB CTFL v4.0.1, sección 2.1.3 («Testing as a Driver for Software Development»), describe el BDD (behavior-driven development, desarrollo guiado por el comportamiento) como un enfoque en el que el comportamiento deseado se expresa con casos de prueba en una forma sencilla de lenguaje natural que entienden las partes interesadas, normalmente en el formato Given/When/Then. La sección 4.5.2 lo llama formato orientado a escenarios de los criterios de aceptación, junto al formato orientado a reglas (una lista de comprobación o una tabla entrada → salida).

Las palabras clave. La referencia de Gherkin en la documentación de Cucumber («Gherkin Reference») da las palabras principales y su traducción a más de 70 idiomas. La primera línea # language: es le dice a Cucumber qué idioma usa el archivo; sin ella se supone inglés. En español son: Característica, Regla, Antecedentes, Escenario (o Ejemplo, las dos son lo mismo), Esquema del escenario, Ejemplos, Dado, Cuando, Entonces, Y, Pero. En lugar de la palabra clave de un paso también se puede escribir *.

Los dos idiomas. El mismo escenario en inglés:

# language: en
Feature: Free delivery
Scenario: An order of exactly 50 €
Given a cart of 50.00 €
When I place the order
Then delivery is free

En el curso los escenarios están en el idioma de la página, porque el objetivo es que el negocio los lea. En un equipo internacional los escenarios se escriben en inglés, para que los lea cualquiera.

Los mutantes vienen de las pruebas de mutación: se planta a propósito un error pequeño en un programa y se mira si las pruebas lo cazan. Aquí los mutantes ya están hechos y describen el comportamiento de la tienda, no código.

Test

Ponte a prueba

1. ¿Qué dice el paso «Entonces»?
2. ¿Qué significa «Y» después de «Entonces»?
3. El escenario para 49,99 € pasa en el sistema correcto. ¿Eso lo hace bueno?
4. ¿Cuál es la primera línea del archivo, con los escenarios debajo?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·