🚀 Capítulo 06: Testes de Integração (Tema: Vingadores)
NOTE
Este capítulo utiliza a temática de Vingadores para explicar os Testes de Integração. Cada herói é forte sozinho, mas o teste real é quando eles precisam lutar juntos!
1. 🎯 Objetivo da Aula
Compreender o conceito de Testes de Integração, entendendo como eles verificam a comunicação entre duas ou mais unidades de código, módulos ou sistemas externos.
2. 🏢 O Cenário Prático (Seu Desafio)
Os Vingadores estão se reunindo para enfrentar o Thanos.
- Teste Unitário: Verificamos se o escudo do Capitão América reflete tiros (Ele funciona sozinho). Verificamos se a armadura do Homem de Ferro voa (Ela funciona sozinha).
- Teste de Integração: O Homem de Ferro atira um laser no escudo do Capitão América para refletir e atingir o inimigo. Eles precisam funcionar juntos!
No software, o teste de integração verifica se a sua função de cadastro consegue conversar com o Banco de Dados real e salvar a informação. Não usamos Mocks aqui; usamos as peças reais! Seu desafio é garantir que a equipe funcione unida!
3. 🧠 Fundamentos: A Teoria Traduzida
Os Testes de Integração ocupam o meio da Pirâmide de Testes. Eles são mais lentos que os unitários porque envolvem comunicação real (disco, rede, banco de dados).
🤝 O que eles testam?
- A conexão entre o seu código e o Banco de Dados.
- A comunicação entre duas APIs diferentes.
- A integração entre o Frontend e o Backend.
🆚 Unitário vs Integração:
- Unitário: Testa a lógica matemática isolada (Ex: cálculo de desconto). Usa Mocks.
- Integração: Testa o fluxo de persistência (Ex: salvar o desconto no banco). Usa o banco real (ou um banco de testes).
4. 📖 Exemplo Guiado: Salvando no Banco (JS)
Imagine que temos a função salvarHeroi que grava no banco de dados.
O Teste de Integração:
// Precisamos conectar no banco de verdade (ou um de teste)!
const banco = require("./banco_dados");
function testIntegracaoSalvarHeroi() {
// 1. Arrange
const novoHeroi = { nome: "Thor", poder: "Trovão" };
// 2. Act (Executa a ação real de salvar)
salvarHeroi(novoHeroi);
// 3. Assert (Busca no banco para ver se realmente salvou!)
const heroiNoBanco = banco.buscarPorNome("Thor");
if (heroiNoBanco && heroiNoBanco.poder === "Trovão") {
console.log("✅ Teste de Integração Passou! O dado foi gravado.");
} else {
console.log("❌ Teste de Integração Falhou!");
}
}5. 🛠️ Prática Obrigatória 1: Identificando o Tipo de Teste
Diga se a situação pede um Teste Unitário ou de Integração:
- Verificar se a função que valida se um e-mail tem o símbolo
@funciona. - Verificar se, ao clicar em “Esqueci a senha”, o sistema consegue enviar um e-mail de verdade através do servidor SMTP.
6. 🛠️ Prática Obrigatória 2: Limpando a Bagunça
Nos testes de integração com banco de dados, nós inserimos dados reais para testar. O que acontece se rodarmos o teste 100 vezes? O banco não vai ficar cheio de “heróis de teste”? O que o programador deve fazer após a execução de um teste de integração?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 06 Qualidade) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_11_qualidade_e_testes_de_software/
├── capitulos/
│ ├── capitulo_06_integracao.md
│ └── codigos/
│ └── cap06/
│ └── integracao_banco.js9. 💡 Checkpoint de Lógica
Para não sujar o banco de dados de produção, as empresas geralmente usam um banco de dados separado apenas para testes de integração, que é apagado e recriado a cada rodada de testes.
10. 🔥 Desafio de Fixação
Pesquise sobre o conceito de Docker e como ele ajuda a criar bancos de dados rápidos e isolados apenas para rodar testes de integração.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Unitário (Lógica simples e isolada).
- Integração (Envolve o sistema conversando com um servidor de e-mail externo).