Introdução: por que seu código merece respeito (e testes)
\n\nImagine: você escreve um código, ele funciona, tudo perfeito. Mas um mês depois, você volta ao projeto, adiciona uma nova funcionalidade — e de repente tudo quebra. Familiar? Se sim, o TDD em PHP é exatamente o que você precisa. O Desenvolvimento Guiado por Testes (Test-Driven Development) não é apenas uma tendência da moda, mas uma filosofia que transforma sua relação com o código. Neste artigo, vamos explorar como o TDD transforma o caos em ordem e os bugs em relíquias do passado. Você aprenderá a escrever testes em PHP que realmente economizam tempo, com exemplos práticos de código. Vamos nessa!
\n\nO que é TDD e por que você precisa dele em PHP?
\n\nTDD em PHP é uma metodologia onde você primeiro escreve o teste, e depois o código que passa nesse teste. Parece estranho? Na verdade, é genial. Em vez de adivinhar se seu código funciona, você recebe feedback instantâneo. Os princípios básicos do TDD são:
\n\n- \n
- Vermelho — escreva um teste que falha (porque o código ainda não foi escrito). \n
- Verde — escreva o código mínimo necessário para o teste passar. \n
- Refatoração — melhore o código sem quebrar os testes. \n
Esse ciclo se repete continuamente. Em PHP, o TDD é especialmente útil porque a linguagem é muito usada em aplicações web, onde erros podem custar caro. Testes com PHPUnit (o principal framework de testes) ajudam a evitar regressões e tornam o código mais transparente. Além disso, o TDD disciplina: você começa a pensar no design antes mesmo de escrever o código.
\n\nConfigurando o ambiente para testes em PHP
\n\nAntes de mergulharmos nos exemplos, vamos preparar o ambiente. Para o desenvolvimento guiado por testes em PHP, precisamos do PHPUnit. A instalação é simples:
\n\ncomposer require --dev phpunit/phpunit ^10\n\nCrie uma pasta tests na raiz do projeto. Dentro dela, crie o arquivo CalculatorTest.php. Certifique-se de ter o PHP 8.0+ instalado. Agora tudo está pronto para o primeiro teste.
Primeiro teste: construindo uma calculadora com TDD
\n\nVamos criar uma calculadora simples. Primeiro, o teste. Este é um exemplo clássico de TDD PHP para iniciantes.
\n\nPasso 1: Vermelho (escrevendo um teste que falha)
\n\nCrie o arquivo tests/CalculatorTest.php:
<?php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase\n{\n public function testAddition()\n {\n $calculator = new Calculator();\n $result = $calculator->add(2, 3);\n $this->assertEquals(5, $result);\n }\n}\n\nExecute o teste:
\n\n./vendor/bin/phpunit tests/CalculatorTest.php\n\nEspere um erro: Class "Calculator" not found. Tudo dentro do planejado — esta é a fase vermelha.
Passo 2: Verde (escrevendo o código mínimo)
\n\nCrie o arquivo src/Calculator.php:
<?php\n\nclass Calculator\n{\n public function add(int $a, int $b): int\n {\n return $a + $b;\n }\n}\n\nNão se esqueça de incluir o autoload no teste:
\n\nrequire_once __DIR__ . '/../src/Calculator.php';\n\nExecute o teste novamente — verde! Agora, a refatoração. Nesta fase, o código é simples, mas depois você poderá melhorá-lo sem medo de quebrar algo.
\n\nPasso 3: Refatoração com confiança
\n\nSuponha que queiramos adicionar uma verificação de tipos. Alteramos o código:
\n\npublic function add(int $a, int $b): int\n{\n if (!is_int($a) || !is_int($b)) {\n throw new InvalidArgumentException('Only integers allowed');\n }\n return $a + $b;\n}\n\nExecute os testes novamente — eles ainda passam. O TDD lhe dá coragem para experimentar.
\n\nTDD Avançado: trabalhando com exceções e mocks
\n\nDepois de dominar o básico, avance para cenários mais complexos. Por exemplo, testar exceções. Em testes unitários PHP, isso é