🚀 Capítulo 08: Testes de Banco de Dados (Tema: Harry Potter / Gringotes)
NOTE
Este capítulo utiliza a temática de Harry Potter para explicar os Testes de Banco de Dados. Os cofres de Gringotes precisam ser invioláveis; testar o banco é garantir que nenhum galeão suma!
1. 🎯 Objetivo da Aula
Compreender como testar a persistência de dados e a integridade do banco de dados, garantindo que as operações de CRUD e as transações funcionem sem falhas.
2. 🏢 O Cenário Prático (Seu Desafio)
Você foi contratado pelos Duendes de Gringotes para programar o sistema de controle dos cofres.
- Quando o Harry deposita 10 galeões, o sistema precisa somar exatamente 10 ao saldo dele.
- Se o sistema der erro no meio da transação, o dinheiro não pode sumir e nem aparecer duplicado (Princípio da Atomicidade).
Testar o banco de dados é garantir que as regras de negócio de armazenamento estejam funcionando. Você não quer irritar um duende ou um bruxo! Seu desafio é garantir a segurança dos cofres!
3. 🧠 Fundamentos: A Teoria Traduzida
Os Testes de Banco de Dados verificam se o esquema do banco, as tabelas, as triggers, as procedures e, principalmente, os dados salvos estão corretos.
🛡️ As Propriedades ACID (O que testar):
- Atomicidade: Ou a transação acontece inteira ou não acontece nada. (Ex: Se transferir dinheiro, tira de um e coloca no outro. Se falhar no meio, desfaz tudo).
- Consistência: O banco deve seguir as regras (Ex: Não permitir idade negativa).
- Isolamento: Uma transação não pode atrapalhar outra que está acontecendo ao mesmo tempo.
- Durabilidade: Uma vez salvo, o dado não some mesmo se faltar energia.
4. 📖 Exemplo Guiado: O Teste do Depósito (JS)
const banco = require("./gringotes_db");
function testDepositoGaleoes() {
// 1. Arrange
const saldoInicial = banco.buscarSaldo("Harry Potter"); // ex: 100
const valorDeposito = 50;
// 2. Act
banco.depositar("Harry Potter", valorDeposito);
// 3. Assert
const saldoFinal = banco.buscarSaldo("Harry Potter");
if (saldoFinal === saldoInicial + valorDeposito) {
console.log("✅ Teste Passou! Cofre atualizado com sucesso.");
} else {
console.log("❌ Teste Falhou! Houve quebra de consistência.");
}
}5. 🛠️ Prática Obrigatória 1: Testando a Transferência
Imagine que você quer testar uma transferência de 20 galeões do cofre do Harry para o cofre do Rony.
- Quais são os 2 valores que você precisa verificar no banco de dados para garantir que o teste passou? (O que acontece com o saldo do Harry e com o do Rony?).
6. 🛠️ Prática Obrigatória 2: O Perigo dos Dados Reais
Por que NUNCA devemos rodar nossos testes de banco de dados usando o banco de dados de produção (o que os clientes reais estão usando)? O que aconteceria se o seu teste fizesse um DELETE para testar a função de exclusão?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 08 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_08_banco.md
│ └── codigos/
│ └── cap08/
│ └── gringotes_test.js9. 💡 Checkpoint de Lógica
Para isolar os testes, usamos o conceito de Rollback: iniciamos uma transação, fazemos o teste (inserimos, alteramos) e no final damos um comando para desfazer tudo, deixando o banco limpo como estava antes!
10. 🔥 Desafio de Fixação
Pesquise o que significa o termo Massa de Dados (Seed) no contexto de testes de banco de dados.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Você precisa verificar se o saldo do Harry diminuiu 20 galeões E se o saldo do Rony aumentou 20 galeões. Os dois eventos precisam acontecer!