Nella maggior parte delle mie applicazioni, ho un oggetto "config" singleton o statico, incaricato di leggere varie impostazioni dal disco. Quasi tutte le classi lo usano, per vari scopi. Essenzialmente è solo una tabella hash di coppie nome / valore. È di sola lettura, quindi non mi sono preoccupato troppo del fatto che ho così tanto stato globale. Ma ora che ho iniziato con i test delle unità, sta iniziando a diventare un problema.
Un problema è che di solito non si desidera testare con la stessa configurazione con cui si esegue. Ci sono un paio di soluzioni a questo:
- Dai all'oggetto di configurazione un setter che viene utilizzato SOLO per il test, in modo che tu possa passare a impostazioni diverse.
- Continua a utilizzare un singolo oggetto di configurazione, ma modificalo da un singleton a un'istanza che passi ovunque sia necessario. Quindi puoi costruirlo una volta nella tua applicazione e una volta nei tuoi test, con impostazioni diverse.
Ma in ogni caso, ti rimane ancora un secondo problema: quasi tutte le classi possono usare l'oggetto config. Quindi, in un test, è necessario impostare la configurazione per la classe sottoposta a test, ma anche TUTTE le sue dipendenze. Questo può rendere brutto il tuo codice di test.
Sto iniziando a concludere che questo tipo di oggetto di configurazione è una cattiva idea. Cosa pensi? Quali sono alcune alternative? E come si avvia il refactoring di un'applicazione che usa la configurazione ovunque?