2009-06-04 1 views
10

ho più test NUnit, e vorrei ogni test per utilizzare un file app.config specifica. C'è un modo per ripristinare la configurazione di un nuovo file di configurazione prima di ogni prova?Ricarica app.config con NUnit

risposta

8

Prova:

/* 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

Sembra funzionare perfettamente. Saresti così gentile da spiegare cosa fa in realtà? :-) – Karsten

+2

Questo non ha funzionato per me (usando .NET 4.0). Ho dovuto estenderlo, si prega di vedere la mia risposta qui: http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime/6151688#6151688 –

0

Se problema è che per diversi gruppi di casi di test ha bisogno di avere diverse configurazioni che si possono avere diversi progetti di prova con un file di configurazione per ciascuno. Quindi esegui i tuoi progetti di test uno alla volta.

+0

un progetto per test? – apollodude217

0

ho answered a similar question per PowerShell. La stessa tecnica dovrebbe funzionare qui, è sufficiente chiamare il seguente all'inizio del test:

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

EDIT: sembra in realtà come questo è più complicato all'interno di un exe compilato - è necessario fare something like this al fine di ottenere la configurazione ricaricata.