En este módulo, exploraremos cómo trabajar con tablas de datos en Cucumber. Las tablas de datos son una herramienta poderosa para manejar múltiples entradas y salidas en tus pruebas BDD. Aprenderás a definir, utilizar y manipular tablas de datos en tus escenarios de Gherkin.
¿Qué son las Tablas de Datos?
Las tablas de datos en Cucumber permiten representar datos tabulares en los escenarios de Gherkin. Son útiles para:
- Probar múltiples conjuntos de datos con un solo escenario.
- Simplificar la representación de datos complejos.
- Mejorar la legibilidad de los escenarios.
Ejemplo de Tabla de Datos en Gherkin
Scenario: Calculating total price Given the following items in the cart | item | price | quantity | | apple | 1.00 | 2 | | banana | 0.50 | 4 | | orange | 0.75 | 3 | When I calculate the total price Then the total price should be 6.75
Implementación de Tablas de Datos en Definiciones de Pasos
Para manejar tablas de datos en tus definiciones de pasos, Cucumber proporciona el objeto DataTable
. Este objeto permite convertir las tablas de Gherkin en estructuras de datos que puedes manipular en tu código.
Ejemplo de Definición de Paso con DataTable
import io.cucumber.datatable.DataTable; import io.cucumber.java.en.Given; import java.util.List; import java.util.Map; public class ShoppingCartSteps { @Given("the following items in the cart") public void the_following_items_in_the_cart(DataTable dataTable) { List<Map<String, String>> items = dataTable.asMaps(String.class, String.class); for (Map<String, String> item : items) { String itemName = item.get("item"); double price = Double.parseDouble(item.get("price")); int quantity = Integer.parseInt(item.get("quantity")); // Lógica para agregar el artículo al carrito } } }
Explicación del Código
DataTable
: Es el objeto que representa la tabla de datos en la definición de paso.asMaps
: Convierte la tabla en una lista de mapas, donde cada fila es un mapa de pares clave-valor.- Iteración: Se itera sobre cada mapa para extraer los valores de cada columna.
Ejercicios Prácticos
Ejercicio 1: Crear un Escenario con Tablas de Datos
Objetivo: Escribir un escenario que use una tabla de datos para probar diferentes combinaciones de usuario y contraseña.
Instrucciones:
- Escribe un escenario en Gherkin que pruebe el inicio de sesión con diferentes combinaciones de usuario y contraseña.
- Implementa la definición de paso para manejar la tabla de datos.
Solución:
Scenario: User login with multiple credentials Given the following user credentials | username | password | | user1 | pass1 | | user2 | pass2 | | user3 | pass3 | When the user attempts to log in Then the login should be successful
import io.cucumber.datatable.DataTable; import io.cucumber.java.en.Given; import java.util.List; import java.util.Map; public class LoginSteps { @Given("the following user credentials") public void the_following_user_credentials(DataTable dataTable) { List<Map<String, String>> credentials = dataTable.asMaps(String.class, String.class); for (Map<String, String> credential : credentials) { String username = credential.get("username"); String password = credential.get("password"); // Lógica para intentar el inicio de sesión } } }
Ejercicio 2: Manipular Tablas de Datos
Objetivo: Modificar la tabla de datos para incluir un campo adicional y actualizar la lógica de la definición de paso.
Instrucciones:
- Añade una columna "role" a la tabla de datos en el escenario.
- Actualiza la definición de paso para manejar el nuevo campo.
Solución:
Scenario: User login with multiple credentials and roles Given the following user credentials | username | password | role | | user1 | pass1 | admin | | user2 | pass2 | user | | user3 | pass3 | guest | When the user attempts to log in Then the login should be successful
import io.cucumber.datatable.DataTable; import io.cucumber.java.en.Given; import java.util.List; import java.util.Map; public class LoginSteps { @Given("the following user credentials") public void the_following_user_credentials(DataTable dataTable) { List<Map<String, String>> credentials = dataTable.asMaps(String.class, String.class); for (Map<String, String> credential : credentials) { String username = credential.get("username"); String password = credential.get("password"); String role = credential.get("role"); // Lógica para intentar el inicio de sesión con el rol } } }
Conclusión
Las tablas de datos en Cucumber son una herramienta versátil para manejar múltiples conjuntos de datos en tus pruebas. Al aprender a implementar y manipular tablas de datos, puedes crear escenarios más robustos y legibles. En el siguiente módulo, exploraremos cómo personalizar informes de Cucumber para mejorar la visibilidad de los resultados de las pruebas.
BDD con Cucumber y Gherkin
Módulo 1: Introducción a BDD
Módulo 2: Comenzando con Cucumber
- Configuración del Entorno
- Creando Tu Primer Proyecto Cucumber
- Entendiendo los Archivos de Características
Módulo 3: Escribiendo Escenarios Gherkin
Módulo 4: Definiciones de Pasos
Módulo 5: Técnicas Avanzadas de Gherkin
Módulo 6: Integrando Cucumber con el Desarrollo
- Integración con Integración Continua
- Usando Cucumber con Diferentes Lenguajes
- Mejores Prácticas para BDD en Equipos
Módulo 7: Características Avanzadas de Cucumber
Módulo 8: Aplicaciones de BDD en el Mundo Real
- Estudio de Caso: BDD en una Aplicación Web
- Estudio de Caso: BDD en una Arquitectura de Microservicios
- Desafíos y Soluciones en BDD