Garantizar que tu código funcione correctamente antes de mostrarlo a un cliente es una de las prácticas más valiosas que puedes adoptar como programador. Trabajar con PHPUnit y guiarte por tus pruebas te permite construir sistemas confiables desde el primer momento, y eso es exactamente lo que se aborda en esta práctica con un proyecto de blog construido desde cero.
¿Cómo se estructura un proyecto PHP con PHPUnit desde cero?
Todo proyecto comienza con un archivo composer.json [0:07]. Este archivo contiene la configuración básica del autoload, que permite acceder a las clases dentro de la carpeta src a través del namespace App. Además, se importa PHPUnit como dependencia para ejecutar los tests.
La configuración de PHPUnit se define en un archivo aparte. Aunque PHPUnit carga automáticamente ciertos elementos, es buena práctica especificar con exactitud lo que requiere el sistema [0:42]. En proyectos reales, los frameworks suelen proporcionar esta configuración, pero al construir desde cero se aprende a entender cada pieza del proceso.
¿Qué lógica sigue el test del blog?
El test replica la lógica básica de un blog [1:03]:
- Se crea una instancia de
Post.
- Se crea una instancia de
Comment.
- Se agrega el comentario al post con el método
addComment.
- Se cuenta la cantidad de comentarios.
- Se obtienen todos los comentarios.
Esta secuencia es la misma que seguirías de forma manual, pero envuelta en afirmaciones (assertions) de PHPUnit que validan automáticamente cada paso.
¿Qué son las aserciones y por qué importan?
Las aserciones son comprobaciones que PHPUnit ejecuta para verificar que el resultado es el esperado [1:18]. Por ejemplo:
assertEquals(1, ...): confirma que tras agregar un comentario, el contador devuelve exactamente uno.
assertInstanceOf(...): verifica que el objeto creado es realmente una instancia de la clase Comment y no un simple string u otro tipo de dato.
assertTrue y assertFalse: validan condiciones booleanas.
Estas comprobaciones son imposibles de realizar con precisión desde un archivo index.php ejecutado en el navegador. PHPUnit garantiza que cada acción se verifica al detalle.
¿Qué es TDD y cómo se aplicó en este proyecto?
El enfoque utilizado se conoce como TDD (Test-Driven Development), o desarrollo guiado por pruebas [1:48]. La terminal fue indicando paso a paso qué crear: primero la clase Post, luego Comment, después el método addComment, el contador y finalmente el método para obtener todos los comentarios.
Parece que se trabaja más, pero el beneficio es enorme. En un sistema con cientos o miles de clases, es imposible recordar cada detalle de lo que se programó meses atrás. Con los tests escritos, la consola confirma que ninguna modificación posterior rompió la funcionalidad existente [2:05].
¿Por qué los tests te permiten trabajar con confianza?
Sin tests, cada clic en el navegador genera incertidumbre. Existe el riesgo real de que el sistema falle frente a un cliente en una sala de reuniones [3:07]. Con PHPUnit:
- Ejecutas los tests antes de cualquier presentación.
- Confirmas con 100% de seguridad que el sistema funciona.
- Detectas errores antes de que lleguen a producción.
Esta metodología te protege a ti y a tu equipo, especialmente cuando pasan semanas o meses entre el desarrollo y la entrega.
¿Qué ejercicio práctico se propone para reforzar el aprendizaje?
Se propone crear un nuevo archivo index.php [2:22] donde se replique manualmente toda la lógica del test:
- Configurar el autoload.
- Crear un
Post y un Comment.
- Agregar el comentario al post.
- Contar los comentarios.
- Obtener todos los comentarios.
Al hacerlo, queda en evidencia que desde un index.php el sistema funciona, pero no se puede comprobar si realmente se está usando la clase correcta o si los tipos de datos son los esperados [2:45]. Esa diferencia es lo que hace indispensable el testing automatizado.
Trabajar siempre con tests y aplicar los conceptos de programación orientada a objetos es la metodología adecuada para construir software profesional. ¿Ya implementaste PHPUnit en alguno de tus proyectos? Comparte tu experiencia en los comentarios.