Notas preliminares
Não vou entrar na distinção dos diferentes tipos de teste que existem, já existem algumas perguntas nesses sites sobre isso.
Vou pegar o que está lá e diz: teste de unidade no sentido de "testar a menor unidade isolável de um aplicativo" da qual essa pergunta realmente deriva
O problema de isolamento
Qual é a menor unidade isolável de um programa. Bem, a meu ver, depende (altamente?) Do idioma em que você está codificando.
Micheal Feathers fala sobre o conceito de costura : [WEwLC, p31]
Uma costura é um local onde você pode alterar o comportamento do seu programa sem editar nesse local.
E sem entrar em detalhes, entendo que uma costura - no contexto de teste de unidade - é um local em um programa em que seu "teste" pode interagir com sua "unidade".
Exemplos
O teste de unidade - especialmente em C ++ - exige que o código em teste adicione mais costuras que seriam estritamente necessárias para um determinado problema.
Exemplo:
- Adicionando uma interface virtual onde a implementação não virtual seria suficiente
- Divisão - generalizando (?) - uma classe (pequena) ainda "apenas" para facilitar a adição de um teste.
- Dividir um projeto executável em bibliotecas aparentemente "independentes", "apenas" para facilitar a compilação independente para os testes.
A questão
Vou tentar algumas versões que esperamos perguntar sobre o mesmo ponto:
- É a maneira como os testes de unidade exigem que a estrutura "apenas" do código de um aplicativo seja benéfica para os testes de unidade ou é realmente benéfica para a estrutura de aplicativos.
- A generalização de código necessária para torná-lo testável por unidade é útil para qualquer coisa, exceto os testes de unidade?
- A adição de testes de unidade força uma generalização desnecessária?
- Os testes de unidade de forma à força no código "sempre" também são uma boa forma para o código em geral, como visto no domínio do problema?
Lembro-me de uma regra geral que disse não generalizar até que você precise / até que haja um segundo lugar que use o código. Nos testes de unidade, sempre existe um segundo lugar que usa o código - o teste de unidade. Então, esse motivo é suficiente para generalizar?