Reload app.config with nunit

前端 未结 3 2161
南旧
南旧 2020-12-17 18:52

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?

相关标签:
3条回答
  • 2020-12-17 19:23

    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);
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-17 19:30

    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.

    0 讨论(0)
  • 2020-12-17 19:33

    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.

    0 讨论(0)
提交回复
热议问题