TDD en PHP: cómo las pruebas convierten el código en arte

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

Introducción: por qué tu código merece respeto (y pruebas)

\n\n

Imagina 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\n

El 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
\n\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\n

Configuración del entorno para pruebas en PHP

\n\n

Antes de sumergirnos en los ejemplos, preparemos el entorno. Para el desarrollo guiado por pruebas en PHP necesitamos PHPUnit. La instalación es sencilla:

\n\n
composer require --dev phpunit/phpunit ^10
\n\n

Crea 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.

\n\n

Tu primera prueba: creando una calculadora con TDD

\n\n

Vamos a crear una calculadora simple. Primero, la prueba. Este es el ejemplo clásico de TDD PHP para principiantes.

\n\n

Paso 1: Rojo (escribe una prueba que falle)

\n\n

Crea tests/CalculatorTest.php:

\n\n
<?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\n

Ejecuta la prueba:

\n\n
./vendor/bin/phpunit tests/CalculatorTest.php
\n\n

Esperamos un error: Class "Calculator" not found. Todo según lo planeado: esta es la fase roja.

\n\n

Paso 2: Verde (escribe el código mínimo)

\n\n

Crea src/Calculator.php:

\n\n
<?php\n\nclass Calculator\n{\n    public function add(int $a, int $b): int\n    {\n        return $a + $b;\n    }\n}
\n\n

No olvides incluir la autocarga en la prueba:

\n\n
require_once __DIR__ . '/../src/Calculator.php';
\n\n

Vuelve 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\n

Paso 3: Refactorización con confianza

\n\n

Supongamos que queremos agregar validación de tipos. Modificamos el código:

\n\n
public 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\n

Ejecutamos las pruebas de nuevo: siguen pasando. TDD te da la confianza para experimentar.

\n\n

TDD avanzado: trabajando con excepciones y mocks

\n\n

Cuando domines lo básico, pasa a escenarios más complejos. Por ejemplo, probar excepciones. En las pruebas unitarias PHP esto es

Blogs

Book Recommendations