June 24, 2009

Unit Test e App.Config

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