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
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);
}
}
}
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.
un progetto per test? – apollodude217
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.
Sembra funzionare perfettamente. Saresti così gentile da spiegare cosa fa in realtà? :-) – Karsten
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 –