0Pricing
Go Academy · Aula

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

  1. Escrevendo testes unitários com testing
  2. Testes orientados por tabelas
  3. Dublês de teste: mocks e stubs
  4. Cobertura de testes e testify
← Voltar para Go Academy