Introducción: por qué tu código merece respeto (y pruebas)
\n\nImagina esto: escribes código, funciona, todo perfecto. Pero un mes después vuelves al proyecto, agregas una nueva funcionalidad y, de repente, todo se rompe. ¿Te suena familiar? Si es así, el TDD en PHP es justo lo que necesitas. El desarrollo guiado por pruebas (Test-Driven Development) no es solo una moda pasajera, sino una filosofía que transforma tu relación con el código. En este artículo, veremos cómo TDD convierte el caos en orden y los bugs en cosas del pasado. Aprenderás a escribir pruebas en PHP que realmente te ahorran tiempo, y lo verás con ejemplos de código. ¡Vamos allá!
\n\n¿Qué es TDD y por qué usarlo en PHP?
\n\nEl TDD en PHP es una metodología donde primero escribes la prueba y luego el código que la supera. ¿Suena extraño? En realidad, es brillante. En lugar de adivinar si tu código funciona, obtienes retroalimentación instantánea. Los principios básicos de TDD son:
\n\n- \n
- Rojo — escribe una prueba que falle (porque el código aún no existe). \n
- Verde — escribe el código mínimo necesario para que la prueba pase. \n
- Refactorización — mejora el código sin romper las pruebas. \n
Este ciclo se repite una y otra vez. En PHP, TDD es especialmente útil porque el lenguaje se usa mucho en aplicaciones web, donde los errores pueden salir caros. Las pruebas con PHPUnit (el framework de testing más popular) ayudan a evitar regresiones y hacen que el código sea más transparente. Además, TDD te disciplina: empiezas a pensar en el diseño antes de escribir una sola línea de código.
\n\nConfiguración del entorno para pruebas en PHP
\n\nAntes de sumergirnos en los ejemplos, preparemos el entorno. Para el desarrollo guiado por pruebas en PHP necesitamos PHPUnit. La instalación es sencilla:
\n\ncomposer require --dev phpunit/phpunit ^10\n\nCrea una carpeta tests en la raíz del proyecto. Dentro, un archivo CalculatorTest.php. Asegúrate de tener PHP 8.0 o superior. Ahora ya está todo listo para tu primera prueba.
Tu primera prueba: creando una calculadora con TDD
\n\nVamos a crear una calculadora simple. Primero, la prueba. Este es el ejemplo clásico de TDD PHP para principiantes.
\n\nPaso 1: Rojo (escribe una prueba que falle)
\n\nCrea tests/CalculatorTest.php:
<?php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase\n{\n public function testAddition()\n {\n $calculator = new Calculator();\n $result = $calculator->add(2, 3);\n $this->assertEquals(5, $result);\n }\n}\n\nEjecuta la prueba:
\n\n./vendor/bin/phpunit tests/CalculatorTest.php\n\nEsperamos un error: Class "Calculator" not found. Todo según lo planeado: esta es la fase roja.
Paso 2: Verde (escribe el código mínimo)
\n\nCrea src/Calculator.php:
<?php\n\nclass Calculator\n{\n public function add(int $a, int $b): int\n {\n return $a + $b;\n }\n}\n\nNo olvides incluir la autocarga en la prueba:
\n\nrequire_once __DIR__ . '/../src/Calculator.php';\n\nVuelve a ejecutar la prueba: ¡verde! Ahora toca refactorizar. En este punto el código es simple, pero más adelante podrás mejorarlo sin miedo a romper nada.
\n\nPaso 3: Refactorización con confianza
\n\nSupongamos que queremos agregar validación de tipos. Modificamos el código:
\n\npublic function add(int $a, int $b): int\n{\n if (!is_int($a) || !is_int($b)) {\n throw new InvalidArgumentException('Only integers allowed');\n }\n return $a + $b;\n}\n\nEjecutamos las pruebas de nuevo: siguen pasando. TDD te da la confianza para experimentar.
\n\nTDD avanzado: trabajando con excepciones y mocks
\n\nCuando domines lo básico, pasa a escenarios más complejos. Por ejemplo, probar excepciones. En las pruebas unitarias PHP esto es