Lavorando con applicazione legacy (o meglio vintage) dove il refactoring è quasi impossibile spesso ci si trova a dover scrivere degli unit test di parti dell’applicatico che utilizzano app.config direttamente. Ed è quindi difficile se non impossibile impostare valori specifici per il test.
L’ideale per il test sarebbe la possibilità di specificare un app.config apposito per quello specifico unit test. E’ possibile speficiare un app settings per l’appdomain specifico utilizzando
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path);
ma per specifiche di design di .NET l’appsettings non viene ricaricato, ed è quindi necessario forzare l’inializzazione impostanto a null l’ initState del ConfigurationManager.
typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, 0);
Il codice necessario si trova in questo thread su stackoverflow.com:
http://stackoverflow.com/questions/949696/reload-app-config-with-nunit
Infine, per rendere indipendete dall’ambiente gli unit test è consigliabile utilizzare DeploymentItem() per la copia del app.config necessario al test