Testes em PHP: visão geral de frameworks e ferramentas (PHPUnit, Pest, Codeception)

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução aos testes de aplicações PHP

O teste é uma parte essencial do desenvolvimento profissional em PHP. Ele permite identificar erros nas fases iniciais, simplifica a refatoração e aumenta a estabilidade do código. No ecossistema PHP, existe um conjunto poderoso de ferramentas: desde o clássico PHPUnit até frameworks modernos como Pest e utilitários especializados para análise de cobertura e teste de mutação.

Neste artigo, vamos explorar os principais frameworks e ferramentas que o ajudarão a organizar testes de qualidade para projetos PHP.



PHPUnit — a base dos testes

PHPUnit é o padrão de facto para testes unitários em PHP. Ele suporta todos os recursos modernos: asserções, fixtures (setUp/tearDown), data providers, teste de exceções, stubs e mocks.

Instalação via Composer:

composer require --dev phpunit/phpunit


Exemplo de um teste simples para uma classe de 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], ]; }}


Principais recursos do PHPUnit:

  • Asserções: assertEquals, assertTrue, assertCount, assertInstanceOf e dezenas de outras.
  • Fixtures: métodos setUp() e tearDown() para preparar e limpar o ambiente.
  • Data providers: anotação @dataProvider para executar um mesmo teste com diferentes conjuntos de dados.
  • Teste de exceções: expectException() e expectExceptionMessage().
  • Stubs e mocks: createMock() e getMockBuilder() para isolar o código testado.


Pest — elegante e moderno

Pest é um framework de testes construído sobre o PHPUnit, mas com uma sintaxe mais concisa e expressiva. Ele é inspirado no Jest (JavaScript) e é ideal para projetos onde a legibilidade dos testes é importante.

Instalação:

composer require --dev pestphp/pest


Exemplo do mesmo teste no 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');


Vantagens do Pest:

  • Código boilerplate mínimo — não é necessário criar classes de teste.
  • Funções integradas expect(), test(), it() para descrição em linguagem natural.
  • Registro automático de testes a partir de funções globais.
  • Suporte a conjuntos aninhados (describe) e testes arquiteturais.


Codeception — para testes de integração e BDD

Codeception é um framework versátil que combina testes unitários, funcionais, de integração e de aceitação. Ele é especialmente popular para testar aplicações web (Laravel, Symfony, Yii) e APIs.

Instalação:

composer require --dev codeception/codeception


Exemplo de um teste de aceitação para login em um site:

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

Recommendations