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