Pruebas en PHP: resumen de frameworks y herramientas (PHPUnit, Pest, Codeception)

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

Pruebas en PHP: frameworks y herramientas



La calidad del código es la base de un proyecto web exitoso. Para los desarrolladores de PHP, las pruebas han dejado de ser una opción y se han convertido en una etapa obligatoria del desarrollo. En este artículo analizaremos tres herramientas clave: PHPUnit (estándar de la industria), Pest (minimalismo moderno) y Codeception (pruebas de integración). Aprenderá a escribir pruebas unitarias, trabajar con objetos mock e implementar TDD en proyectos PHP.



1. PHPUnit — fundamento de las pruebas en PHP



PHPUnit es el estándar de facto para las pruebas unitarias en PHP. Forma parte de Symfony, Laravel y otros frameworks populares.



Instalación y prueba básica

composer require --dev phpunit/phpunit


Ejemplo de una prueba simple para una clase calculadora:

// src/Calculator.phpclass Calculator {    public function add($a, $b) {        return $a + $b;    }}

// tests/CalculatorTest.phpuse PHPUnit\\Framework\\TestCase;

class CalculatorTest extends TestCase { public function testAddition() { $calc = new Calculator(); $this->assertEquals(4, $calc->add(2, 2)); }}


Trabajo con objetos mock

PHPUnit proporciona un mecanismo integrado para crear simulaciones (mock):

public function testUserRepository() {    $mockRepo = $this->createMock(UserRepository::class);    $mockRepo->method('findById')             ->willReturn(new User(1, 'Alice'));

$service = new UserService($mockRepo); $result = $service->getUser(1); $this->assertEquals('Alice', $result->getName());}


2. Pest — sintaxis elegante para pruebas



Pest es un envoltorio sobre PHPUnit que ofrece una sintaxis más concisa y legible. Ideal para proyectos donde la velocidad de escritura de pruebas es importante.



Instalación y ejemplo

composer require --dev pestphp/pest


Compárelo con PHPUnit: la misma prueba en Pest se ve así:

// tests/CalculatorTest.phpit('calculates addition', function () {    $calc = new Calculator();    expect($calc->add(2, 2))->toBe(4);});


Funcionalidades avanzadas

  • Higher Order Tests — cadenas de llamadas sin anidamiento
  • Architecture Testing — verificación de la estructura de clases
  • Snapshot Testing — comparación con datos de referencia


3. Codeception — para pruebas de integración y funcionales



Codeception combina pruebas unitarias, funcionales y de aceptación en un solo framework. Es compatible con Selenium, Symfony, Laravel, Yii e incluso WordPress.



Estructura de las pruebas

codecept generate:cest acceptance LoginCest


Ejemplo de una prueba funcional para Laravel:

// tests/functional/UserCest.phpclass UserCest {    public function testLogin(FunctionalTester $I) {        $I->amOnPage('/login');        $I->fillField('email', 'user@example.com');        $I->fillField('password', 'secret');        $I->click('Login');        $I->see('Dashboard');    }}


4. Herramientas adicionales



  • Mockery — biblioteca flexible para objetos mock (alternativa a los mocks integrados de PHPUnit)
  • PHPStan / Psalm — análisis estático que detecta errores antes de ejecutar las pruebas
  • Infection — pruebas de mutación: verifica la calidad de las propias pruebas
  • PHP CodeSniffer — control de cumplimiento de PSR-12


5. Ejemplo práctico: TDD para un servicio de API



Implementamos un ciclo simple de TDD (Test-Driven Development) para un servicio de pedidos:



Paso 1. Escribimos la prueba

// tests/OrderServiceTest.phppublic function testCrea                    

Recommendations