TDD em PHP: como testes transformam código em arte

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: por que seu código merece respeito (e testes)

\n\n

Imagine: 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\n

O que é TDD e por que você precisa dele em PHP?

\n\n

TDD 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
\n\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\n

Configurando o ambiente para testes em PHP

\n\n

Antes de mergulharmos nos exemplos, vamos preparar o ambiente. Para o desenvolvimento guiado por testes em PHP, precisamos do PHPUnit. A instalação é simples:

\n\n
composer require --dev phpunit/phpunit ^10
\n\n

Crie 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.

\n\n

Primeiro teste: construindo uma calculadora com TDD

\n\n

Vamos criar uma calculadora simples. Primeiro, o teste. Este é um exemplo clássico de TDD PHP para iniciantes.

\n\n

Passo 1: Vermelho (escrevendo um teste que falha)

\n\n

Crie o arquivo tests/CalculatorTest.php:

\n\n
<?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\n

Execute o teste:

\n\n
./vendor/bin/phpunit tests/CalculatorTest.php
\n\n

Espere um erro: Class "Calculator" not found. Tudo dentro do planejado — esta é a fase vermelha.

\n\n

Passo 2: Verde (escrevendo o código mínimo)

\n\n

Crie o arquivo src/Calculator.php:

\n\n
<?php\n\nclass Calculator\n{\n    public function add(int $a, int $b): int\n    {\n        return $a + $b;\n    }\n}
\n\n

Não se esqueça de incluir o autoload no teste:

\n\n
require_once __DIR__ . '/../src/Calculator.php';
\n\n

Execute 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\n

Passo 3: Refatoração com confiança

\n\n

Suponha que queiramos adicionar uma verificação de tipos. Alteramos o código:

\n\n
public 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\n

Execute os testes novamente — eles ainda passam. O TDD lhe dá coragem para experimentar.

\n\n

TDD Avançado: trabalhando com exceções e mocks

\n\n

Depois de dominar o básico, avance para cenários mais complexos. Por exemplo, testar exceções. Em testes unitários PHP, isso é

Blogs

Book Recommendations