Testes orientados por tabelas
Testes parametrizados com subtestes
Testes orientados por tabelas é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
O que são testes orientados por tabela?
Testes orientados por tabela definem uma fatia de casos de teste (entradas e saídas esperadas) e iteram sobre eles com um único corpo de teste. Eles reduzem a duplicação e tornam trivial a adição de casos.
Padrão básico
Defina uma estrutura para cada caso, faça a iteração com t.Run e informe as falhas usando o nome do caso:
tests := []struct {
name string
input int
want int
}{
{"zero", 0, 0},
{"positive", 3, 9},
{"negative", -2, 4},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := Square(tt.input)
if got != tt.want {
t.Errorf("Square(%d) = %d; want %d", tt.input, got, tt.want)
}
})
}Fatia de estruturas anônimas
Use uma estrutura anônima para o tipo do caso de teste — isso mantém a definição do caso próxima do teste e evita nomear um tipo usado uma única vez.
Inclusão de casos de erro
Adicione um campo wantErr bool para testar se as funções retornam erros nos cenários esperados:
{"invalid input", -1, 0, true},
// in the loop:
if (err != nil) != tt.wantErr {
t.Errorf("wantErr %v, got err %v", tt.wantErr, err)
}Nomeação de subtestes
Um campo de nome descritivo torna as falhas autoexplicativas. Você pode executar um caso específico com -run TestFunc/case_name.
Subtestes paralelos com t.Run
Marque cada subteste como paralelo e capture a variável do laço para executar os casos simultaneamente (isso é importante quando os testes são limitados por E/S).
for _, tt := range tests {
tt := tt // capture
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
// ...
})
}Configuração compartilhada por caso
Use campos de função tt.setup para permitir a configuração por caso sem duplicar o código padrão:
type tc struct {
setup func() *DB
input string
want int
}Como manter os casos legíveis
Se os casos crescerem muito, defina-os como variáveis nomeadas ou carregue-os de arquivos de dados de teste. Mantenha a tabela compacta — uma linha por caso sempre que possível.
Teste de várias saídas
Crie funções de teste orientadas por tabela que retornam vários valores adicionando um campo para cada saída:
type tc struct {
input string
wantVal int
wantErr bool
}Assert do Testify em tabelas
Use github.com/stretchr/testify/assert nos testes orientados por tabela para obter asserções legíveis sem blocos if/t.Errorf detalhados.
assert.Equal(t, tt.want, got, tt.name)Documentação com casos
A tabela de casos funciona como documentação viva. Desenvolvedores futuros podem consultá-la para entender de relance todas as entradas compatíveis e os casos extremos.
Verificação rápida
Por que você captura a variável do laço (tt := tt) antes de usar t.Parallel em testes orientados por tabela?
Recapitulação: testes orientados por tabela
Pontos principais:
- Fatia de estruturas que abrange entradas, saídas esperadas e indicador de erro
- Iteração com t.Run para subtestes nomeados e independentes
- Captura da variável do laço (tt := tt) antes de t.Parallel
- Os casos funcionam como documentação viva dos comportamentos compatíveis
Perguntas Frequentes
A aula “Testes orientados por tabelas” é grátis?
Sim — o texto completo de “Testes orientados por tabelas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Testes orientados por tabelas”?
Testes parametrizados com subtestes Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Testes orientados por tabelas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Escrevendo testes unitários com testing
- Testes orientados por tabelas
- Dublês de teste: mocks e stubs
- Cobertura de testes e testify