Pruebas en PHP: frameworks y herramientas para código de calidad

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
```html

Pruebas en PHP: frameworks y herramientas

Las pruebas de calidad son la base de una aplicación web confiable. En el ecosistema de PHP, se ha consolidado un potente conjunto de herramientas que cubre todos los niveles: desde pruebas unitarias hasta pruebas de aceptación. En este artículo, analizaremos los principales frameworks y bibliotecas que te ayudarán a escribir código limpio y comprobable.

1. PHPUnit — el estándar de facto

PHPUnit sigue siendo el framework más popular para pruebas unitarias en PHP. Forma parte de Symfony, Laravel y muchos otros proyectos. Sus principales características:

  • Soporte de aserciones (assertions) — desde simples assertEquals hasta complejas assertJsonStructure.
  • Fixtures para preparar y limpiar datos (setUp(), tearDown()).
  • Generación de informes en formatos HTML, XML, Clover.
  • Integración con CI/CD (GitHub Actions, GitLab CI, Jenkins).
<?php
use PHPUnit\\Framework\\TestCase;

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

    public function testDivisionByZero()
    {
        $this->expectException(\\DivisionByZeroError::class);
        $calc = new Calculator();
        $calc->divide(10, 0);
    }
}

2. Mockery — creación flexible de simulaciones (stubs)

Mockery amplía las capacidades de PHPUnit para crear objetos simulados (mock objects). Es útil cuando necesitas reemplazar un servicio complejo o una base de datos.

  • Soporte de simulación parcial (partial mocks).
  • Verificación del orden de las llamadas a métodos (shouldReceive).
  • Trabajo con métodos mágicos (__call, __get).
<?php
use Mockery as m;

class OrderProcessorTest extends TestCase
{
    public function testProcess()
    {
        $gateway = m::mock(PaymentGateway::class);
        $gateway->shouldReceive('charge')
                ->once()
                ->with(100.0)
                ->andReturn(true);

        $processor = new OrderProcessor($gateway);
        $this->assertTrue($processor->process(100.0));
    }

    protected function tearDown(): void
    {
        m::close();
    }
}

3. Codeception — todo en uno

Codeception combina pruebas unitarias, funcionales y de aceptación en una sintaxis unificada. Es especialmente popular en proyectos web donde se necesita probar formularios, solicitudes AJAX y bases de datos.

  • Módulos para trabajar con PHPBrowser, Selenium, Laravel, Symfony.
  • Generación de pruebas mediante CLI: codecept generate:test.
  • Soporte de BDD (Behavior-Driven Development) a través de Gherkin.
<?php
// acceptance.suite.yml
actor: AcceptanceTester
modules:
    enabled:
        - WebDriver:
            url: 'http://localhost'
            browser: chrome
        - Laravel5:
            environment_file: .env.testing

// tests/acceptance/LoginCept.php
$I = new AcceptanceTester($scenario);
$I->wantTo('see that login form works');
$I->amOnPage('/login');
$I->fillField('email', 'user@example.com');
$I->fillField('password', 'secret');
$I->click('Login');
$I->see('Dashboard');

4. Pest — sintaxis minimalista

Pest es una alternativa moderna a PHPUnit con una sintaxis concisa, inspirada en la biblioteca JavaScript Jest. Es ideal para quienes valoran la legibilidad de las pruebas.

  • Resolución automática de dependencias.
  • Cadenas de aserciones: expect($result)->toBeTrue().
  • Soporte integrado para ejecución paralela.
<?php
use function Pest\\Faker\\faker;

test('it creates a user', function () {
    $user = User::factory()->create([
        'name' => faker()->name,
        'email' => faker()->email,
    ]);

    expect($u
```                    

Recommendations