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/phpunitExemplo 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/pestExemplo 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/codeceptionExemplo de um teste de aceitação para login em um site:
<?php$I = new AcceptanceTester($scenario);$I->amO Também na biblioteca
Play Services para Kotlin: guia completo com exemplos práticos
Métricas Prometheus em TypeScript: guia completo para client.js
Geração de relatórios PDF em Swift para iOS e macOS com PDFKit e Core Graphics