Estamos tentando projetar nosso sistema para ser testável e, na maioria das partes, desenvolvido usando TDD. Atualmente, estamos tentando resolver o seguinte problema:
Em vários lugares, é necessário usar métodos auxiliares estáticos como ImageIO e URLEncoder (API Java padrão) e várias outras bibliotecas que consistem principalmente em métodos estáticos (como as bibliotecas Apache Commons). Mas é extremamente difícil testar os métodos que usam essas classes auxiliares estáticas.
Eu tenho várias idéias para resolver esse problema:
- Use uma estrutura simulada que pode simular classes estáticas (como o PowerMock). Esta pode ser a solução mais simples, mas, de alguma forma, parece desistir.
- Crie classes de invólucro instáveis em torno de todos esses utilitários estáticos para que eles possam ser injetados nas classes que os utilizam. Parece uma solução relativamente limpa, mas receio que acabemos criando uma enorme quantidade dessas classes de wrapper.
- Extraia todas as chamadas para essas classes auxiliares estáticas em uma função que possa ser substituída e teste uma subclasse da classe que realmente quero testar.
Mas continuo pensando que isso só deve ser um problema que muitas pessoas precisam enfrentar ao fazer TDD - portanto, já deve haver soluções para esse problema.
Qual é a melhor estratégia para manter as classes que usam esses auxiliares estáticos testáveis?