Estou trabalhando para tornar minhas aulas testáveis por unidade, usando injeção de dependência. Mas algumas dessas classes têm muitos clientes e não estou pronto para refatorar todas elas para começar a passar nas dependências ainda. Então, eu estou tentando fazer isso gradualmente; mantendo as dependências padrão por enquanto, mas permitindo que elas sejam substituídas para teste.
Uma abordagem que estou discutindo é apenas mover todas as "novas" chamadas para seus próprios métodos, por exemplo:
public MyObject createMyObject(args) {
return new MyObject(args);
}
Em meus testes de unidade, posso apenas subclassificar essa classe e substituir as funções de criação, para que eles criem objetos falsos.
Será esta uma boa abordagem? Existem desvantagens?
Em geral, é bom ter dependências codificadas, desde que você possa substituí-las para teste? Eu sei que a abordagem preferida é explicitamente exigi-los no construtor e gostaria de chegar lá eventualmente. Mas eu estou querendo saber se este é um bom primeiro passo.
Uma desvantagem que me ocorreu: se você tem subclasses reais que precisa testar, não poderá reutilizar a subclasse de teste que escreveu para a classe pai. Você precisará criar uma subclasse de teste para cada subclasse real e ela deverá substituir as mesmas funções de criação.