Sto lavorando per rendere le mie lezioni testabili in unità, usando l'iniezione delle dipendenze. Ma alcune di queste classi hanno molti clienti e non sono ancora pronta a riformattare tutte per iniziare a passare le dipendenze. Quindi sto provando a farlo gradualmente; mantenendo le dipendenze predefinite per ora, ma consentendo loro di essere sovrascritte per i test.
Un approccio che sto affrontando è quello di spostare tutte le "nuove" chiamate nei loro metodi, ad esempio:
public MyObject createMyObject(args) {
return new MyObject(args);
}
Quindi nei test delle unità, posso semplicemente sottoclassare questa classe e sovrascrivere le funzioni di creazione, in modo che creino invece oggetti falsi.
è un buon approccio? Ci sono degli svantaggi?
Più in generale, va bene avere dipendenze codificate, purché sia possibile sostituirle per i test? So che l'approccio preferito è richiederli esplicitamente nel costruttore, e mi piacerebbe arrivarci alla fine. Ma mi chiedo se questo è un buon primo passo.
Uno svantaggio che mi è appena venuto in mente: se hai sottoclassi reali che devi testare, non puoi riutilizzare la sottoclasse di test che hai scritto per la classe genitore. Dovrai creare una sottoclasse di prova per ogni sottoclasse reale e dovrà sovrascrivere le stesse funzioni di creazione.