🚀 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:

  1. Verificar se a função que valida se um e-mail tem o símbolo @ funciona.
  2. 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)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 06 Qualidade) e clique em Commit to main.
  2. 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.js

9. 💡 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:

  1. Unitário (Lógica simples e isolada).
  2. Integração (Envolve o sistema conversando com um servidor de e-mail externo).

Capitulo Anterior | Proximo Capitulo