Na maioria dos meus aplicativos, tenho um objeto singleton ou estático "config", encarregado de ler várias configurações do disco. Quase todas as classes o utilizam, para vários propósitos. Essencialmente, é apenas uma tabela de hash de pares nome / valor. É somente leitura, então eu não tenho me preocupado muito com o fato de ter tanto estado global. Mas agora que estou começando a testar a unidade, está começando a se tornar um problema.
Um problema é que você geralmente não deseja testar com a mesma configuração que executa. Existem algumas soluções para isso:
- Dê ao objeto de configuração um setter SOMENTE usado para teste, para que você possa passar em diferentes configurações.
- Continue usando um único objeto de configuração, mas altere-o de um singleton para uma instância que você passe por todos os lugares onde for necessário. Em seguida, você pode construí-lo uma vez em seu aplicativo e uma vez em seus testes, com configurações diferentes.
Mas de qualquer maneira, você ainda tem um segundo problema: quase qualquer classe pode usar o objeto de configuração. Portanto, em um teste, você precisa definir a configuração da classe que está sendo testada, mas também TODAS as suas dependências. Isso pode tornar seu código de teste feio.
Estou começando a chegar à conclusão de que esse tipo de objeto de configuração é uma má ideia. O que você acha? Quais são algumas alternativas? E como você começa a refatorar um aplicativo que usa configuração em qualquer lugar?