PHPUnit para PHP: guía completa con ejemplos

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

¿Qué es PHPUnit y para qué sirve?

\n\n

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

PHPUnit soporta mocks (objetos simulados), fixtures (conjuntos de datos para pruebas), cobertura de código (code coverage) y muchas otras funciones avanzadas.

\n\n

Instalación de PHPUnit

\n\n

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

Instalación global (recomendada para CLI)

\n
composer global require phpunit/phpunit
\n\n

Después de esto, asegúrate de que el directorio de paquetes globales de Composer esté agregado al PATH. Verifica la instalación:

\n
phpunit --version
\n\n

Instalación local (dentro del proyecto)

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

Después de esto, PHPUnit estará disponible a través de vendor/bin/phpunit.

\n\n

Instalación de una versión específica

\n
composer require --dev phpunit/phpunit:^10.0
\n\n

Importante: 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\n

Inicio rápido con ejemplo de código

\n\n

Creemos una clase simple Calculator.php y escribamos pruebas para ella.

\n\n

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

Paso 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    }\                    

Recommendations