O que é PHPUnit e para que serve?
\n\nPHPUnit é um framework para testes unitários (unit testing) na linguagem PHP. Ele faz parte da família xUnit e fornece aos desenvolvedores ferramentas para automatizar a verificação do funcionamento de componentes individuais do programa (classes, métodos, funções).
\n\nPara que serve o PHPUnit?
\n- \n
- Detecção precoce de erros: Os testes são executados após cada alteração no código, permitindo identificar regressões instantaneamente. \n
- Documentação do código: Testes bem escritos servem como documentação viva, mostrando como um determinado método deve funcionar. \n
- Refatoração sem medo: Você pode reescrever o código com confiança, sabendo que os testes não permitirão quebrar a funcionalidade existente. \n
- Suporte a TDD (Test-Driven Development): Desenvolvimento orientado a testes — metodologia onde primeiro se escreve o teste e depois o código mínimo para fazê-lo passar. \n
- Integração com CI/CD: PHPUnit se integra facilmente em pipelines de integração contínua (GitHub Actions, GitLab CI, Jenkins). \n
PHPUnit suporta mocks (objetos simulados), fixtures (conjuntos de dados para testes), cobertura de código (code coverage) e muitas outras funções avançadas.
\n\nInstalação do PHPUnit
\n\nO PHPUnit é instalado via Composer — o gerenciador de dependências para PHP. Se você ainda não tem o Composer, instale-o pelo site oficial getcomposer.org.
\n\nInstalação global (recomendada para CLI)
\ncomposer global require phpunit/phpunit\n\nApós isso, certifique-se de que o diretório de pacotes globais do Composer foi adicionado ao PATH. Verifique a instalação:
\nphpunit --version\n\nInstalação local (dentro do projeto)
\ncomposer require --dev phpunit/phpunit\n\nApós isso, o PHPUnit estará disponível através de vendor/bin/phpunit.
Instalação de uma versão específica
\ncomposer require --dev phpunit/phpunit:^10.0\n\nImportante: A versão do PHPUnit deve corresponder à versão do PHP no seu projeto. Por exemplo, PHPUnit 10 requer PHP 8.1 ou superior.
\n\nInício rápido com exemplo de código
\n\nVamos criar uma classe simples Calculator.php e escrever testes para ela.
Passo 1. Criando a classe para testar
\n<?php\n// src/Calculator.php\n\nclass Calculator\n{\n public function add(int $a, int $b): int\n {\n return $a + $b;\n }\n\n public function subtract(int $a, int $b): int\n {\n return $a - $b;\n }\n\n public function multiply(int $a, int $b): int\n {\n return $a * $b;\n }\n\n public function divide(int $a, int $b): float\n {\n if ($b === 0) {\n throw new \\InvalidArgumentException("Division by zero");\n }\n return $a / $b;\n }\n}\n\nPasso 2. Criando a classe de teste
\n<?php\n// tests/CalculatorTest.php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase\n{\n private Calculator $calculator;\n\n protected function setUp(): void\n {\n $this->calculator = new Calculator();\n }\n\n public function testAdd(): void\n {\n $result = $this->calculator->add(2, 3);\n $this->assertEquals(5, $result);\n }\n\n public function testSubtract(): void\n {\n $result = $this->calculator->subtract(10, 4);\n $this->assertEquals(6, $result);\n }\n\n public function testMultiply(): void\n {\n $result = $this->calculator->multiply(3, 4);\n $this->assertEquals(12, $result);\n }\n\n public function testDivide(): void\n {\n $result = $this->calculator->divide(10, 2);\n $this->assertEquals(5.0, $result);\n }\