¿Qué es PHPUnit y para qué sirve?
\n\nPHPUnit es un framework para pruebas unitarias (unit testing) en el lenguaje PHP. Forma parte de la familia xUnit y proporciona a los desarrolladores herramientas para automatizar la verificación del funcionamiento de componentes individuales del programa (clases, métodos, funciones).
\n\n¿Para qué sirve PHPUnit?
\n- \n
- Detección temprana de errores: Las pruebas se ejecutan después de cada cambio en el código, permitiendo identificar regresiones al instante. \n
- Documentación del código: Las pruebas bien escritas sirven como documentación viva, mostrando cómo debe funcionar un método determinado. \n
- Refactorización sin miedo: Puedes reescribir el código con confianza, sabiendo que las pruebas no permitirán romper la funcionalidad existente. \n
- Soporte para TDD (Test-Driven Development): Desarrollo guiado por pruebas: una metodología donde primero se escribe la prueba y luego el código mínimo para que pase. \n
- Integración con CI/CD: PHPUnit se integra fácilmente en pipelines de integración continua (GitHub Actions, GitLab CI, Jenkins). \n
PHPUnit soporta mocks (objetos simulados), fixtures (conjuntos de datos para pruebas), cobertura de código (code coverage) y muchas otras funciones avanzadas.
\n\nInstalación de PHPUnit
\n\nPHPUnit se instala a través de Composer, el gestor de dependencias para PHP. Si aún no tienes Composer, instálalo desde el sitio oficial getcomposer.org.
\n\nInstalación global (recomendada para CLI)
\ncomposer global require phpunit/phpunit\n\nDespués de esto, asegúrate de que el directorio de paquetes globales de Composer esté agregado al PATH. Verifica la instalación:
\nphpunit --version\n\nInstalación local (dentro del proyecto)
\ncomposer require --dev phpunit/phpunit\n\nDespués de esto, PHPUnit estará disponible a través de vendor/bin/phpunit.
Instalación de una versión específica
\ncomposer require --dev phpunit/phpunit:^10.0\n\nImportante: La versión de PHPUnit debe coincidir con la versión de PHP en tu proyecto. Por ejemplo, PHPUnit 10 requiere PHP 8.1 o superior.
\n\nInicio rápido con ejemplo de código
\n\nCreemos una clase simple Calculator.php y escribamos pruebas para ella.
Paso 1. Crear la clase a probar
\n<?php\n// src/Calculator.php\n\nclass Calculator\n{\n public function add(int $a, int $b): int\n {\n return $a + $b;\n }\n\n public function subtract(int $a, int $b): int\n {\n return $a - $b;\n }\n\n public function multiply(int $a, int $b): int\n {\n return $a * $b;\n }\n\n public function divide(int $a, int $b): float\n {\n if ($b === 0) {\n throw new \\InvalidArgumentException("Division by zero");\n }\n return $a / $b;\n }\n}\n\nPaso 2. Crear la clase de prueba
\n<?php\n// tests/CalculatorTest.php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase\n{\n private Calculator $calculator;\n\n protected function setUp(): void\n {\n $this->calculator = new Calculator();\n }\n\n public function testAdd(): void\n {\n $result = $this->calculator->add(2, 3);\n $this->assertEquals(5, $result);\n }\n\n public function testSubtract(): void\n {\n $result = $this->calculator->subtract(10, 4);\n $this->assertEquals(6, $result);\n }\n\n public function testMultiply(): void\n {\n $result = $this->calculator->multiply(3, 4);\n $this->assertEquals(12, $result);\n }\n\n public function testDivide(): void\n {\n $result = $this->calculator->divide(10, 2);\n $this->assertEquals(5.0, $result);\n }\