Go Testes Intermediário
Testes com testing
O pacote testing da biblioteca padrão do Go é a base para escrever testes automatizados. Um teste é uma função com assinatura func TestXxx(t *testing.T) que vive em um arquivo terminado em _test.go. O comando go test compila o pacote junto com seus testes e executa cada função de teste.
Pontos-chave
- Arquivos de teste terminam em
_test.goe funções de teste começam comTest. go testexecuta os testes;go test -vmostra cada subteste pelo nome.- Table-driven tests organizam vários casos em uma slice de structs e um loop.
t.Runcria subtestes nomeados, facilitando isolar falhas.t.Helpermarca funções auxiliares para que a linha do erro aponte para o teste real.
package calculadora
import "testing"
// Soma retorna a soma de dois inteiros.
func Soma(a, b int) int { return a + b }
// verificaIgual é uma helper: t.Helper faz o erro apontar para quem chamou.
func verificaIgual(t *testing.T, esperado, obtido int) {
t.Helper()
if esperado != obtido {
t.Errorf("esperado %d, obtido %d", esperado, obtido)
}
}
func TestSoma(t *testing.T) {
casos := []struct {
nome string
a, b int
esperado int
}{
{"positivos", 2, 3, 5},
{"negativos", -1, -1, -2},
{"zero", 0, 7, 7},
}
for _, c := range casos {
t.Run(c.nome, func(t *testing.T) {
verificaIgual(t, c.esperado, Soma(c.a, c.b))
})
}
}