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.

  1. Crie o arquivo combate.go na pasta src/:
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)
}
  1. Agora crie o arquivo de teste combate_test.go na 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:

  1. No terminal, digite:
go test

Resultado 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)
    }
}

Capitulo Anterior | Proximo Capitulo