2009-06-04 18 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

+2

これは私のためには機能しませんでした(.NET 4.0を使用)。私はそれを拡張しなければならなかった、私の答えをここに見てください:http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime/6151688#6151688 –

0

異なるケースのテストケースで異なる設定が必要な場合は、それぞれの設定ファイルで異なるテストプロジェクトを作成できます。次に、テストプロジェクトを1つずつ実行します。

+0

一つのプロジェクト? – apollodude217

0

I answered a similar question for Powershell。ここで動作するはず同じ技術は、単にあなたのテストの開始時に次のように呼び出します。

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

EDIT:これはコンパイル済みのEXE内でより複雑であるように実際に見える - あなたが得るためにsomething like thisを行う必要があります設定がリロードされました。

関連する問題