2009-06-04 68 views
10

我有多個NUnit測試,我希望每個測試都使用特定的app.config文件。 有沒有辦法在每次測試之前將配置重置爲新的配置文件?用nunit重新加載app.config

回答

8

嘗試:

每個測試
/* 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

這似乎工作完美。你會如此善意地解釋它實際上做了什麼? :-) – Karsten 2009-06-09 15:22:45

0

如果問題是您針對不同的測試用例集需要不同的配置,那麼您可以爲每個測試用例配置不同的測試項目。然後一次運行一個測試項目。

+0

一個項目? – apollodude217 2010-07-15 20:08:54

0

I answered a similar question for Powershell。同樣的技術也應該在這裏工作,只需調用在測試開始時的以下內容:

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

編輯:其實看起來這是一個比較複雜編譯EXE中 - 你需要做的something like this爲了得到該配置重新加載。