Pular para o conteúdo
SDETRole
SDETRole

Glossário · Fundamentos de testes

Teste de integração

Em inglês: Integration test

Também chamado de: testes de integração, integration testing

Definição

Um teste que verifica se dois ou mais componentes, como um serviço e seu banco de dados ou duas APIs, funcionam corretamente juntos pelas suas interfaces reais.

Um teste de integração verifica as conexões entre componentes, e não a lógica dentro de um só. Ele usa implementações reais em pelo menos uma fronteira: um repositório contra um banco de dados real, um serviço chamando a API de outro serviço, um produtor de mensagens e o seu consumidor. São esses os testes que pegam SQL errado, serialização incorreta, configuração faltando e contratos incompatíveis, coisas que testes unitários com mocks deixariam passar.

Exemplo

Um OrderRepository tem testes unitários com mocks, e eles passam. O teste de integração o executa contra uma instância real de PostgreSQL iniciada em um container:

  1. Suba o PostgreSQL com Testcontainers e aplique as migrations do schema.
  2. Salve um pedido com três itens pelo repositório.
  3. Carregue-o de volta pelo ID e verifique se os totais e os itens batem.
  4. Consulte pedidos por intervalo de datas e verifique se os limites são inclusivos.

Rodando contra um banco de dados real, esse teste pode revelar um erro de digitação no nome de uma coluna, uma migration que nunca foi aplicada, um erro de conversão de fuso horário ou uma query que funciona em um banco em memória mas não no PostgreSQL.

Integração vs unitário vs end-to-end

Unitário Integração End-to-end
Escopo Uma função ou classe Alguns componentes e suas interfaces O sistema inteiro, como um usuário
Dependências Substituídas por dublês Reais na fronteira testada Todas reais
Velocidade Milissegundos Segundos De segundos a minutos
Uma falha aponta para Uma lógica específica Uma interface específica Algum lugar do sistema

Abordagens

  • Testes de integração estreitos (narrow) verificam uma fronteira de cada vez (serviço mais banco de dados), com todo o resto em stub. São rápidos e precisos, e a maioria dos times quer muitos deles.
  • Testes de integração amplos (broad) sobem vários serviços reais juntos. Dão mais confiança, mas são mais lentos e mais difíceis de diagnosticar.
  • Os livros clássicos também descrevem a integração big-bang, top-down e bottom-up, que descrevem a ordem em que os módulos são combinados. Em entrevistas vale conhecer os termos, mas os times modernos integram, em sua maioria, continuamente.

Erros comuns

  • Compartilhar um único banco de dados de longa duração entre testes e desenvolvedores, o que faz os resultados dependerem de dados que sobraram. Dê a cada execução uma instância limpa e descartável.
  • Mockar justamente a fronteira que você queria testar, o que transforma o teste de integração de volta em um teste unitário.

Digite para buscar em todo o SDETRole.

Busca de texto completo com Pagefind · roda no seu navegador Abrir página de busca →