Aula 08: Frameworks de Teste e Qualidade 🧪
🎯 Nossa Missão
- Entender a importância dos testes automatizados.
- Conhecer a Pirâmide de Testes.
- Descobrir frameworks (Jest, PyTest, JUnit).
- Introdução ao TDD (Test Driven Development).
😱 O Medo de Mudar o Código
- "Se eu mexer aqui, o que será que quebra?"
- "No meu PC funcionava, no servidor parou."
- "O bug que eu corrigi ontem voltou hoje."
- Testes são a sua rede de segurança!
🏗️ A Pirâmide de Testes
mermaid graph TD U[Testes Unitários - MUITOS] I[Integração - ALGUNS] E[E2E / Interface - POUCOS] U ---|Rápido/Barato| I I ---|Lento/Caro| E
1. Testes Unitários 🧩
Testam a menor parte possível do código (funções isoladas). * Vantagem: Execução instantânea. * Foco: Lógica pura, cálculos, pequenas regras. * Ferramentas: Jest, PyTest.
2. Testes de Integração 🔗
Verificam se dois ou mais componentes funcionam bem juntos. * Ex: Aplicação + Banco de Dados. * Ex: Serviço A + API externa. * Buscam erros na comunicação entre partes.
3. Testes End-to-End (E2E) 🌐
Simulam o usuário real usando o sistema completo. * Abre o navegador, clica em botões, preenche forms. * Custo: São lentos e "frágeis" (quebram se o layout muda). * Ferramentas: Cypress, Playwright, Selenium.
🔴 Ciclo TDD (Red, Green, Refactor)
Uma nova forma de pensar o desenvolvimento: 1. Red: Escreva um teste que falha (o código não existe). 2. Green: Escreva o mínimo de código para o teste passar. 3. Refactor: Melhore o código sem quebrar o teste.
🤡 O que são Mocks?
Simulando o mundo real. * Você não quer enviar um e-mail de verdade toda vez que rodar o teste. * Você cria um "objeto dublê" que finge ser o serviço de e-mail. * Isso isola o teste e o deixa muito mais rápido.
📦 Framework: Jest (JavaScript)
- Simples:
expect(soma(2,2)).toBe(4). - Extremamente rápido (paralelismo).
- Inclui ferramentas de Cobertura de Código.
🐍 Framework: PyTest (Python)
- Sintaxe limpa:
assert soma(2,2) == 4. - Poderoso sistema de Fixtures (preparação de dados).
- Ecossistema de plugins gigante.
☕ Framework: JUnit (Java)
- O avô dos frameworks modernos.
- Robusto e integrado nativamente com IDEs.
- Padrão absoluto no mundo corporativo Java.
📊 Cobertura de Código (Coverage)
"Quanto do meu projeto está sendo testado?" * Gera relatórios mostrando quais linhas foram executadas pelos testes. * Meta: 80% a 90% (100% é quase impossível e caro).
💎 Qualidade de Código (Linting)
Diferente de testes, o Linter foca na "estética" e "segurança estática". * ESLint (JS), Flake8 (Python). * Evita variáveis não usadas. * Garante estilos uniformes.
🔄 Testes na Pipeline (CI)
Nunca confie apenas no teste local! * A pipeline roda os testes a cada git push. * Impede que código "quebrado" chegue na produção. * Feedback automático para o time.
🧪 Anatomia de um Teste
test('deve somar dois números corretamente', () => {
// 1. Arrange (Preparar)
const a = 10;
const b = 5;
// 2. Act (Agir)
const resultado = soma(a, b);
// 3. Assert (Verificar)
expect(resultado).toBe(15);
});
🏆 Checklist de Qualidade Pro
- Entende os níveis da pirâmide.
- Sabe o que é um Mock e por que usar.
- Instalou um framework de teste no seu projeto.
- Entende o ciclo básico do TDD.
📝 Prática de Hoje
- Criar uma função simples de cálculo.
- Escrever um teste unitário para ela usando Jest ou PyTest.
- Ver o teste passar e o teste falhar (mudando a expectativa).
🏁 Dúvidas?
Dormir tranquilo = Ter uma boa suite de testes! 🚀💤