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 di avere così tanto stato globale. Ma ora che sto iniziando con i test unitari, sta iniziando a diventare un problema.
Un problema è che di solito non si desidera eseguire il test con la stessa configurazione con cui si esegue. Ci sono un paio di soluzioni a questo:
- Assegna all'oggetto config un setter utilizzato SOLO per il test, in modo da poter passare in diverse impostazioni.
- Continua a utilizzare un singolo oggetto di configurazione, ma modificalo da un singleton in un'istanza che passi ovunque sia necessario. Quindi puoi costruirlo una volta nella tua applicazione e una volta nei test, con impostazioni diverse.
Ma in entrambi i casi, 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 da testare, ma anche TUTTE le sue dipendenze. Questo può rendere brutto il tuo codice di test.
Sto iniziando a giungere alla conclusione 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 utilizza la configurazione ovunque?