2009-06-04 21 views
10

Tengo varias pruebas de NUnit, y me gustaría que cada prueba utilizara un archivo app.config específico. ¿Hay alguna manera de restablecer la configuración a un nuevo archivo de configuración antes de cada prueba?Recargar app.config con nunit

Respuesta

8

Probar:

/* Usage 
* using(AppConfig.Change("my.config")) { 
* // do something... 
* } 
*/ 
public abstract class AppConfig : IDisposable 
{ 
    public static AppConfig Change(string path) 
    { 
     return new ChangeAppConfig(path); 
    } 
    public abstract void Dispose(); 

    private class ChangeAppConfig : AppConfig 
    { 
     private bool disposedValue = false; 
     private string oldConfig = Conversions.ToString(AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE")); 

     public ChangeAppConfig(string path) 
     { 
      AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path); 
      typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, 0); 
     } 

     public override void Dispose() 
     { 
      if (!this.disposedValue) 
      { 
       AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", this.oldConfig); 
      typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, 0); 
       this.disposedValue = true; 
      } 
      GC.SuppressFinalize(this); 
     } 
    } 
} 
+0

Esto parece funcionar perfecto. ¿Serías tan amable de explicar lo que realmente hace? :-) – Karsten

+2

Esto no funcionó para mí (usando .NET 4.0). Tuve que extenderlo, por favor vea mi respuesta aquí: http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime/6151688#6151688 –

0

Si su problema es que para diferentes conjuntos de casos de prueba necesita tener diferentes configuraciones, puede tener diferentes proyectos de prueba con un archivo de configuración para cada uno. Luego ejecute sus proyectos de prueba uno a la vez.

+0

un proyecto por prueba? – apollodude217

0

I answered a similar question para Powershell. La misma técnica se debe trabajar aquí, sólo tiene que llamar a los siguientes al inicio de la prueba:

System.AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath)

EDIT: se ve realmente como esto es más complicado dentro de un exe compilado - lo que necesita hacer something like this con el fin de conseguir la configuración recargada