Pruebas en PHP: descripción general 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

Introducción a las pruebas de aplicaciones PHP

Las pruebas son una parte esencial del desarrollo profesional en PHP. Permiten detectar errores en etapas tempranas, simplifican la refactorización y aumentan la estabilidad del código. En el ecosistema PHP existe un potente conjunto de herramientas: desde el clásico PHPUnit hasta frameworks modernos como Pest y utilidades especializadas para análisis de cobertura y pruebas de mutación.

En este artículo, revisaremos los frameworks y herramientas clave que le ayudarán a organizar pruebas de calidad en proyectos PHP.



PHPUnit — la base de las pruebas

PHPUnit es el estándar de facto para pruebas unitarias en PHP. Soporta todas las funcionalidades modernas: aserciones, fixtures (setUp/tearDown), data providers, pruebas de excepciones, stubs y mocks.

Instalación mediante Composer:

composer require --dev phpunit/phpunit


Ejemplo de una prueba simple para una clase calculadora:

<?phpuse PHPUnit\\Framework\\TestCase;

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

/** @dataProvider additionProvider */ public function testWithDataProvider($a, $b, $expected) { $calculator = new Calculator(); $this->assertEquals($expected, $calculator->add($a, $b)); }

public function additionProvider(): array { return [ [0, 0, 0], [1, 1, 2], [-1, 1, 0], ]; }}


Funcionalidades clave de PHPUnit:

  • Aserciones: assertEquals, assertTrue, assertCount, assertInstanceOf y decenas más.
  • Fixtures: métodos setUp() y tearDown() para preparar y limpiar el entorno.
  • Data Providers: anotación @dataProvider para ejecutar una misma prueba con diferentes conjuntos de datos.
  • Pruebas de excepciones: expectException() y expectExceptionMessage().
  • Stubs y Mocks: createMock() y getMockBuilder() para aislar el código bajo prueba.


Pest — elegante y moderno

Pest es un framework de pruebas construido sobre PHPUnit, pero con una sintaxis más concisa y expresiva. Está inspirado en Jest (JavaScript) y es ideal para proyectos donde la legibilidad de las pruebas es importante.

Instalación:

composer require --dev pestphp/pest


Ejemplo de la misma prueba en Pest:

<?php

use function Pest\\Faker\\fake;

test('addition works correctly', function () { $calculator = new Calculator(); expect($calculator->add(2, 2))->toBe(4);});

dataset('numbers', [ [0, 0, 0], [1, 1, 2], [-1, 1, 0],]);

test('addition with data provider', function ($a, $b, $expected) { $calculator = new Calculator(); expect($calculator->add($a, $b))->toBe($expected);})->with('numbers');


Ventajas de Pest:

  • Mínimo código repetitivo — no es necesario crear clases de prueba.
  • Funciones integradas expect(), test(), it() para descripciones en lenguaje natural.
  • Registro automático de pruebas desde funciones globales.
  • Soporte para conjuntos anidados (describe) y pruebas arquitectónicas.


Codeception — para pruebas de integración y BDD

Codeception es un framework versátil que combina pruebas unitarias, funcionales, de integración y de aceptación. Es especialmente popular para probar aplicaciones web (Laravel, Symfony, Yii) y APIs.

Instalación:

composer require --dev codeception/codeception


Ejemplo de una prueba de aceptación para iniciar sesión en un sitio web:

<?php$I = new AcceptanceTester($scenario);$I->amO                    

Recommendations