Skip to content
Latchkey

O que é integration testing?

Integration testing verifica que componentes separados funcionam corretamente em conjunto, em vez de testar cada peça isoladamente.

O código pode passar em cada unit test e ainda assim falhar quando as peças são conectadas, porque os bugs vivem nas junções entre elas. Integration testing mira exatamente essas junções, as interações entre módulos, serviços e sistemas externos.

O que é

Um integration test exercita dois ou mais componentes funcionando juntos: seu código conversando com um banco de dados, dois serviços trocando mensagens, uma API chamando um sistema de terceiros. O objetivo é confirmar que os contratos e premissas entre componentes realmente se sustentam quando conectados.

Como difere dos unit tests

Um unit test isola uma função, frequentemente substituindo seus colaboradores por fakes. Um integration test deliberadamente mantém os colaboradores reais conectados, o que o torna mais realista mas mais lento e mais trabalhoso de configurar. Unit tests encontram bugs de lógica; integration tests encontram bugs de interface e de conexão.

Um exemplo

Um serviço salva um pedido em um banco de dados. Um unit test poderia verificar a lógica de construção do pedido com um banco de dados fake. Um integration test roda contra um banco de dados real (de teste), confirmando que o SQL é válido, que o schema corresponde e que o registro salvo é relido corretamente, coisas que o fake nunca poderia revelar.

Como se encaixa no CI

Integration tests geralmente precisam de dependências reais, então o CI frequentemente sobe bancos de dados ou serviços como containers para a execução dos testes. Como são mais lentos que unit tests, eles tipicamente rodam depois que os unit tests passam, e podem rodar em um subconjunto de mudanças ou em um schedule para os mais caros.

Por que detecta bugs reais

Muitos incidentes de produção vêm de premissas incompatíveis entre componentes, um campo renomeado, um null inesperado, uma API alterada. Integration tests detectam esses antes do release precisamente porque testam as interações reais em vez de substitutos mockados.

Principais conclusões

  • Integration testing verifica que componentes funcionam em conjunto.
  • Ele mantém os colaboradores reais conectados, ao contrário dos unit tests.
  • Ele detecta bugs de interface e de conexão que os unit tests não pegam.

Guias relacionados