Capítulo 18: Testes Automatizados ❌🧬
Neste capítulo, vamos aprender a criar Testes Automatizados no Go. O Go possui uma ferramenta de testes embutida excelente, e vamos usar o tema dos X-Men (Sala de Perigo)!
📖 Por que fazer Testes?
Testar o código garante que ele funciona como esperado e que não vai quebrar se mudarmos algo no futuro. É como o treinamento dos X-Men na Sala de Perigo: simula situações reais para ver se o herói está pronto!
No Go, qualquer arquivo que termine com _test.go é considerado um arquivo de teste e é executado pelo comando go test.
📖 Exemplo Guiado: Testando o Poder de Ataque
Vamos criar uma função que calcula o dano e um arquivo de teste para verificar se o cálculo está correto.
- Crie o arquivo
combate.gona pastasrc/:
package main
// Função simples que queremos testar
func CalcularDano(forca int, defesa int) int {
dano := forca - defesa
if dano < 0 {
return 0
}
return dano
}
func main() {
// Código principal aqui (vazio por enquanto)
}- Agora crie o arquivo de teste
combate_test.gona mesma pasta:
package main
import "testing" // Pacote padrão de testes
// O nome da função deve começar com "Test"
func TestCalcularDano(t *testing.T) {
resultado := CalcularDano(50, 30)
esperado := 20
if resultado != esperado {
// Se der errado, avisa o teste
t.Errorf("Resultado %d foi diferente do esperado %d", resultado, esperado)
}
}🕹️ Como Executar e Testar
Em vez de usar go run, usamos o comando de teste do Go:
- No terminal, digite:
go testResultado Esperado:
PASS
ok mark1 ...s(Se apareceu PASS, significa que seu código passou no simulador!)
📊 Ilustração Visual: O Ciclo de Testes
Veja como o teste funciona:
graph LR A[Código] -->|go test| B{Simulador} B -->|Sucesso| C[PASS] B -->|Falha| D[FAIL]
🛠️ Prática Obrigatória 1: Testando Cura
Crie uma função Curar(vidaAtual int, cura int) int no arquivo combate.go que some a vida e a cura (o limite máximo de vida é 100). Depois, crie uma função de teste TestCurar no arquivo combate_test.go para verificar se a cura funciona e se respeita o limite de 100!
🔑 Gabarito de Código
Prática 1: Adicionar em combate.go
func Curar(vidaAtual int, cura int) int {
total := vidaAtual + cura
if total > 100 {
return 100
}
return total
}Prática 1: Adicionar em combate_test.go
func TestCurar(t *testing.T) {
res := Curar(80, 30)
esp := 100 // Não pode passar de 100!
if res != esp {
t.Errorf("Cura falhou. Vida foi para %d, esperado %d", res, esp)
}
}