Skip to content
Latchkey

O Que É um Teste Unitário?

Um teste unitário verifica um único pequeno trecho de código, como uma função ou classe, isolado do resto do sistema.

Testes unitários são os menores e mais numerosos testes na maioria das suítes. Cada um exercita uma única unidade de comportamento sem banco de dados, sem rede e sem outras partes móveis, então roda em milissegundos e falha por um único motivo claro. Eles formam a base da pirâmide de testes.

O que conta como uma unidade

Uma unidade é o menor trecho de código que vale a pena testar isoladamente, frequentemente uma única função ou método. A característica definidora é o isolamento: um teste unitário não toca sistemas externos, então seu resultado depende apenas da entrada que você fornece.

Por que testes unitários são rápidos e focados

Como evitam I/O, testes unitários rodam aos milhares em segundos. Quando um falha, a causa é local e óbvia, o que os torna baratos de escrever, baratos de rodar e baratos de depurar. Essa velocidade é o que permite que desenvolvedores os rodem constantemente.

Um exemplo simples

Uma função que formata um preço tem entradas e saídas claras, então um punhado de asserts descreve totalmente seu comportamento.

A focused unit test
test("formats price", () => {
  expect(formatPrice(1999)).toBe("$19.99");
  expect(formatPrice(0)).toBe("$0.00");
});

Armadilhas comuns

  • Alcançar um banco de dados ou rede, o que o torna um teste de integração.
  • Fazer assertions sobre detalhes internos de implementação em vez de comportamento.
  • Fazer mock em excesso até o teste não refletir mais o uso real.
  • Escrever um teste gigante em vez de vários pequenos e focados.

Testes unitários em uma suíte de CI

Testes unitários são o primeiro portão no CI porque são rápidos e determinísticos. Um pull request que quebra um deveria falhar em segundos. Manter a camada unitária grande e as camadas mais lentas pequenas é o que torna uma suíte de CI rápida. Em runners rápidos essa camada pode terminar em bem menos de um minuto mesmo em bases de código grandes.

Principais conclusões

  • Um teste unitário exercita um pequeno trecho de código isolado.
  • O isolamento torna testes unitários rápidos, focados e fáceis de depurar.
  • Eles formam a base larga da pirâmide de testes e rodam primeiro no CI.

Guias relacionados