FNSP Web Page

Testes: onde vale mesmo a pena gastar o tempo

"É preciso escrever testes" é um conselho inútil sem a segunda metade: quais. Escrever os errados custa tempo, dá falsa confiança e trava as alterações que devia proteger.

1. Os três andares

  • Unitários — uma função, sem base de dados nem rede. Milissegundos. É onde se testam as regras: cálculos, validações, transformações.

  • De integração — várias peças juntas, com base de dados a sério. Segundos. É onde se apanha o que a unidade não vê: consultas erradas, migrações em falta.

  • Ponta a ponta — um browser a clicar como uma pessoa. Minutos, e frágeis. Poucos, e só nos caminhos que não podem falhar: entrar, pagar, publicar.

A proporção clássica é uma pirâmide, e o erro clássico é invertê-la.

2. Testar o comportamento, não a implementação

// Frágil: parte quando se renomeia um método interno
test('chama o validarEmail', () => {
  const espia = mock(servico, 'validarEmail');
  registar(dados);
  assert.equal(espia.callCount, 1);
});

// Robusto: descreve o que tem de acontecer
test('recusa registo com email inválido', async () => {
  const resultado = await registar({ ...dados, email: 'nao-e-email' });
  assert.equal(resultado.ok, false);
});

O segundo continua a passar depois de reescrever a função por dentro — e é isso que um teste tem de fazer: dar liberdade para mudar o como, sem mudar o quê.

3. O que vale mais a pena

  • O que já partiu uma vez. Cada bug corrigido merece um teste que o impeça de voltar.

  • As fronteiras. Listas vazias, nulos, textos com acentos, datas na mudança da hora.

  • As regras que dão dinheiro ou dores de cabeça: preços, permissões, cálculos.

  • As invariantes. Um teste que percorre o código e falha se alguém acrescentar uma rota sem autenticação vale por vinte testes de funções.

4. E o que não vale

Getters, wrappers de uma linha à volta de uma biblioteca, e a percentagem de cobertura como objetivo. Cem por cento de cobertura com asserções fracas é uma suite que corre depressa e não impede nada.

Um teste intermitente é pior do que teste nenhum: ensina a equipa a ignorar o vermelho. Ou se corrige, ou se apaga.

Comentários

Ainda ninguém comentou este artigo.

Voltar ao blog

Gostávamos de saber quantas pessoas visitam o site, com o Google Analytics. Sem a sua autorização não corre nada. Política de Privacidade.