En este módulo, exploraremos dos características avanzadas de Gherkin y Cucumber: los antecedentes (Backgrounds) y los hooks. Estas herramientas son esenciales para escribir pruebas más limpias, organizadas y eficientes. Al final de esta sección, deberás ser capaz de implementar antecedentes y hooks en tus proyectos de Cucumber para mejorar la estructura y la reutilización de tus escenarios de prueba.

Antecedentes (Backgrounds)

¿Qué es un Antecedente?

Un antecedente en Gherkin es una sección que permite definir pasos comunes que se ejecutan antes de cada escenario en un archivo de características. Esto es útil para evitar la repetición de pasos que son comunes a múltiples escenarios.

Sintaxis de un Antecedente

La sintaxis de un antecedente es similar a la de un escenario, pero se coloca al inicio del archivo de características, antes de los escenarios individuales.

Feature: Gestión de Usuarios

  Background:
    Given el usuario está en la página de inicio de sesión
    And el campo de nombre de usuario está vacío
    And el campo de contraseña está vacío

  Scenario: Inicio de sesión exitoso
    When el usuario ingresa un nombre de usuario válido
    And el usuario ingresa una contraseña válida
    Then el usuario debería ver el panel de control

  Scenario: Inicio de sesión fallido
    When el usuario ingresa un nombre de usuario inválido
    And el usuario ingresa una contraseña inválida
    Then el usuario debería ver un mensaje de error

Ventajas de Usar Antecedentes

  • Reutilización de Código: Evita la duplicación de pasos comunes en múltiples escenarios.
  • Claridad: Mejora la legibilidad al separar los pasos comunes de los específicos de cada escenario.
  • Mantenimiento: Facilita el mantenimiento de los archivos de características al centralizar los pasos comunes.

Hooks

¿Qué son los Hooks?

Los hooks en Cucumber son bloques de código que se ejecutan en puntos específicos del ciclo de vida de la ejecución de pruebas. Los hooks más comunes son Before y After, que se ejecutan antes y después de cada escenario, respectivamente.

Tipos de Hooks

  1. Before Hook: Se ejecuta antes de cada escenario. Útil para configurar el estado inicial o preparar el entorno de prueba.
  2. After Hook: Se ejecuta después de cada escenario. Útil para limpiar el entorno o realizar tareas de cierre.
  3. Around Hook: Permite envolver la ejecución de un escenario, proporcionando un control más granular sobre el flujo de ejecución.

Ejemplo de Hooks en Cucumber

import io.cucumber.java.Before;
import io.cucumber.java.After;

public class Hooks {

    @Before
    public void setUp() {
        System.out.println("Configurando el entorno de prueba");
        // Código para inicializar el entorno
    }

    @After
    public void tearDown() {
        System.out.println("Limpiando el entorno de prueba");
        // Código para limpiar el entorno
    }
}

Ventajas de Usar Hooks

  • Modularidad: Permite separar la configuración y limpieza del entorno del cuerpo principal de los escenarios.
  • Reutilización: Los hooks pueden ser reutilizados en múltiples archivos de características.
  • Flexibilidad: Proporciona un control detallado sobre el flujo de ejecución de las pruebas.

Ejercicio Práctico

Ejercicio

  1. Crea un archivo de características que incluya un antecedente común para dos escenarios.
  2. Implementa un Before y un After hook en tu proyecto de Cucumber.

Solución

Archivo de Características

Feature: Gestión de Productos

  Background:
    Given el administrador está en la página de gestión de productos

  Scenario: Agregar un nuevo producto
    When el administrador ingresa los detalles del producto
    Then el producto debería ser agregado exitosamente

  Scenario: Eliminar un producto existente
    When el administrador selecciona un producto para eliminar
    Then el producto debería ser eliminado exitosamente

Implementación de Hooks

import io.cucumber.java.Before;
import io.cucumber.java.After;

public class ProductHooks {

    @Before
    public void setUp() {
        System.out.println("Inicializando la base de datos de productos");
        // Código para inicializar la base de datos
    }

    @After
    public void tearDown() {
        System.out.println("Restaurando la base de datos de productos");
        // Código para restaurar la base de datos
    }
}

Conclusión

En esta sección, hemos aprendido cómo los antecedentes y hooks pueden mejorar la estructura y eficiencia de tus pruebas BDD con Cucumber. Los antecedentes permiten evitar la repetición de pasos comunes, mientras que los hooks proporcionan un control detallado sobre el ciclo de vida de las pruebas. Con estas herramientas, puedes escribir pruebas más limpias y mantenibles, lo que es crucial para proyectos de gran escala. En el próximo módulo, exploraremos cómo utilizar esquemas de escenarios y ejemplos para manejar variaciones en tus pruebas.

© Copyright 2024. Todos los derechos reservados