Como sei se tenho cobertura de teste de unidade suficiente para remover um teste de integração?

15

Estou trabalhando em um sistema legado (com isso quero dizer que foi escrito sem testes). Tentamos testar alguns dos sistemas, escrevendo testes de integração que testam a funcionalidade do lado de fora.

Isso me dá alguma confiança para refatorar partes do código sem me preocupar em quebrá-lo. Mas o problema é que esses testes de integração exigem uma implantação (2 minutos) e muitos minutos para serem executados. Além disso, eles são uma dor para manter. Cada um deles abrange milhares de linhas de código e quando um deles quebra, pode levar uma hora (s) para depurar o porquê.

Eu tenho escrito muitos testes unitários para essas mudanças funcionais que tenho feito ultimamente, mas antes de me comprometer eu sempre faço uma nova implantação e executo todos os testes de integração, apenas para ter certeza de que eu não perdi nada. Neste ponto, eu conheço meus testes de unidade e alguns dos testes de integração estão sobrepondo o que eles testam.

Como eu sei quando meus bons testes de unidade estão cobrindo adequadamente um teste de integração ruim para que eu possa excluir esse teste de integração?

    
por Daniel Kaplan 30.01.2013 / 22:03
fonte

2 respostas

18

A métrica mais fácil é perguntar "quando foi a última vez que esse teste de integração legitimamente falhou?" Se já faz muito tempo (houve muitas mudanças) desde que o teste de integração falhou, os testes de unidade provavelmente estão fazendo um bom trabalho. Se o teste de integração falhou recentemente, então houve um defeito que não foi detectado pelos testes de unidade.

Minha preferência geralmente seria aumentar a robustez dos testes de integração, a ponto de eles poderem ser executados de maneira confiável sem supervisão. Se demorar muito tempo para correr, execute-os durante a noite. Eles ainda são valiosos, mesmo que sejam executados apenas ocasionalmente. Se esses testes forem muito frágeis ou exigirem intervenção manual, talvez não valha o tempo gasto para mantê-los em execução, e você pode considerar descartar aqueles que têm mais sucesso.

    
por 30.01.2013 / 22:10
fonte
7

Testes de unidades não são o santo graal do teste, eles são apenas uma ferramenta de muitos que devem ser usados para testar uma base de código. Portanto, nenhuma quantidade de testes unitários deve ser considerada segura para substituir outros testes. Se você tiver um teste de integração ruim, deverá trabalhar para torná-lo um bom teste de integração, e não para substituí-lo por outra coisa, como substituir a porta da frente por uma cerca de perímetro e um portão.

    
por 30.01.2013 / 22:48
fonte