Reload app.config with nunit

前端 未结 3 2160
南旧
南旧 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);
            }
        }
    }
    

提交回复
热议问题