BDD en PHP: Cómo escribir código que incluso un gerente entiende

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cuando el código habla el idioma del negocio: introducción a BDD



Imagínese esta situación: ha escrito un módulo de pago perfecto, desde el punto de vista del código. Todos los métodos funcionan, las excepciones se manejan, la cobertura de pruebas unitarias es del 99%. Abre el champán, pero llega el gerente y dice: «¿Por qué se descuenta el dinero antes de confirmar el pedido?». Y se da cuenta: el error no está en el código, sino en la comprensión de la tarea.



¿Le suena familiar? Precisamente para estos casos existe BDD (Behaviour-Driven Development): desarrollo guiado por el comportamiento. No es solo otra metodología, sino un puente entre «quiero que funcione» y «cómo implementarlo en PHP». Si está cansado de reescribir la lógica después de cada aclaración de requisitos, este artículo es para usted.



En este material, analizaremos cómo implementar BDD en PHP utilizando el framework Behat, escribiremos pruebas reales y entenderemos por qué esto hace que el código sea más limpio y la comunicación más transparente.



¿Qué es BDD y en qué se diferencia de TDD?



Muchos confunden Behaviour-Driven Development con el TDD (Test-Driven Development) habitual. Y es cierto, externamente son similares: en ambos casos primero se escriben las pruebas. Pero la diferencia está en el enfoque.



  • TDD se trata de «cómo verificar que una función devuelve el número correcto». Las pruebas se escriben en el lenguaje del programador: assert, equals, mock.
  • BDD se trata de «cómo se comporta el sistema en una situación de negocio específica». Los escenarios se escriben en un lenguaje natural, casi humano.


La idea clave de BDD en PHP es utilizar un lenguaje unificado para la comunicación. Desarrolladores, testers y gerentes leen el mismo escenario. Y si en él está escrito «el usuario agrega un producto al carrito sin autenticarse», todos lo entienden de la misma manera.



Herramientas: Behat y Gherkin



En el mundo de PHP, la herramienta principal para BDD es Behat. Es un framework que analiza escenarios escritos en lenguaje Gherkin y los convierte en pruebas ejecutables. Gherkin es un lenguaje simple en español (o inglés) con palabras clave: Feature, Scenario, Given, When, Then.



Instalemos Behat en su proyecto PHP:



composer require --dev behat/behat behat/mink-extension behat/mink-goutte-driver


Después de la instalación, inicializamos el proyecto:



vendor/bin/behat --init


La estructura se verá así:



features/  bootstrap/    FeatureContext.php  your_feature.featurebehat.yml


Escribiendo nuestro primer escenario BDD en PHP



Supongamos que tenemos una tienda en línea. El requisito de negocio es: «Un usuario registrado puede agregar un producto al carrito y ver el total». Creamos el archivo features/cart.feature:



Feature: Carrito del comprador  Como usuario registrado  Quiero agregar productos al carrito  Para ver el costo total

Scenario: Agregar un producto Given accedo al sitio como usuario "ivan@example.com" And en la página del catálogo hay un producto "Portátil" por 50000 rublos When hago clic en "Agregar al carrito" para el producto "Portátil" Then veo el mensaje "Producto agregado" And el total del carrito es igual a 50000 rublos


Observe: este escenario puede ser leído por cualquier gerente sin conocimientos de PHP. Pero para Behat, es una prueba ejecutable.



Implementación de pasos (Step Definitions)



Ahora necesitamos «enseñar» a Behat a entender estos pasos. Abra features/bootstrap/FeatureContext.php:



<?php

use Behat\\Behat\\Context\\Context;use Behat\\Gherkin\\Node\\PyStringNode;use Behat\\Gherkin\\Node\\TableNode;

class FeatureContext implements Context{ private $currentUser; private $cart = []; private $products = [];

/** * @Given accedo al sitio como

Blogs

Book Recommendations