I have multiple NUnit tests, and I would like each test to use a specific app.config file. Is there a way to reset the configuration to a new config file before each test?
Asked
Active
Viewed 6,563 times
3 Answers
8
Try:
/* 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);
}
}
}

Dylan Beattie
- 53,688
- 35
- 128
- 197
-
This seems to work perfect. Would you be so kind to explain what it actually does? :-) – Karsten Jun 09 '09 at 15:22
-
2This didn't work for me (using .NET 4.0). I had to extend it, please see my answer here: http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime/6151688#6151688 – Daniel Hilgarth May 27 '11 at 11:37
0
If you issue is that you for different sets of test cases needs to have different configurations you can have different test projects with a configuration file for each. Then run your test projects one at a time.

Rune FS
- 21,497
- 7
- 62
- 96
0
I answered a similar question for Powershell. The same technique should work here, simply call the following at the start of your test:
System.AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath)
EDIT: Actually looks like this is more complicated within a compiled exe - you need to do something like this in order to get the config reloaded.

Community
- 1
- 1

Chris Ballard
- 3,771
- 4
- 28
- 40