Aula 12 - Testes Automatizados 🧪
🎯 Objetivo da Aula
Descobrir por que desenvolvedores seniores escrevem testes. Vamos aprender a utilizar o PHPUnit (embutido no Laravel) para criar testes de unidade e testes de funcionalidade (feature), garantindo que sua aplicação não quebre após cada mudança.
🧬 Por que testar?
- Confiança: Você sabe que seu código funciona.
- Refatoração: Você pode mudar o código antigo sem medo de estragar o que já estava pronto.
- Documentação: Os testes servem como um manual de como o sistema deve se comportar.
🛠️ Tipos de Testes no Laravel
1. Testes de Unidade (Unit)
Testam uma pequena parte isolada do código (ex: uma função matemática ou uma classe simples), sem tocar no banco de dados.
2. Testes de Funcionalidade (Feature)
Testam uma funcionalidade completa, simulando uma requisição HTTP, passando pelo controller, banco de dados e verificando a resposta.
📊 Pirâmide de Testes
graph TD
A[Unit Tests - Muitos/Rápidos] --- B[Feature Tests - Médio]
B --- C[E2E/Browser Tests - Poucos/Lentos]
💻 Criando seu primeiro teste
Exemplo de Teste de Feature:
public function test_usuario_pode_ver_a_home()
{
$response = $this->get('/');
$response->assertStatus(200);
}
🏗️ TDD (Test Driven Development)
O ciclo do TDD consiste em: 1. Red: Escreva um teste que falha (porque a funcionalidade ainda não existe). 2. Green: Escreva o código mínimo para o teste passar. 3. Refactor: Melhore o código mantendo o teste passando.
🧠 Blocos de Destaque
Banco de Dados de Teste
O Laravel usa automaticamente um banco sqlite :memory: se configurado no phpunit.xml, tornando os testes extremamente rápidos!
🛠️ Exercícios Progressivos
- Básico: Crie um teste que verifique se a rota de login está acessível (Status 200).
- Intermediário: Crie um teste que tente cadastrar um produto sem nome e verifique se há um erro de validação.
- Desafio: Use o método
$this->actingAs($user)para testar se apenas usuários logados podem acessar a página administrativa.
🚀 Mini-Projeto da Aula
Calculadora de Frete Testada: Desenvolva uma classe simples que calcula o frete baseado na distância. Em seguida, escreva pelo menos 5 testes de unidade cobrindo diferentes cenários: frete grátis para curtas distâncias, frete fixo, erro para distâncias negativas, etc.