0

Moles を使用して構成ファイル内の 1 つの項目を「迂回」する方法を探しています。私がすることができます:

         NameValueCollection appsettings = new NameValueCollection();
         appSettings.Add("MyKey", "MyValue");
         System.Configuration.Moles.MConfigurationManager.AppSettingsGet = () => this.appSettings;

これは正常に動作しますが、テストしようとしているクラスは ConfigSections を含む他の構成設定を使用しており、Moles 迂回路がこれを壊しているようです。セクション全体ではなく、特定の値のみを置き換えたい。TypeMock では、次のことができます。

Isolate.WhenCalled(() => ConfigurationManager.AppSettings["MyKey"]).WithExactArguments().WillReturn("MyValue");

TypeMock を使用して configurationManager をモックすると、テストは成功しますが、Moles バージョン (同じことを行う必要があるように見えます) を使用すると失敗します。

ほくろを使用して TypeMock のように振る舞う方法についての助けをいただければ幸いです。

4

1 に答える 1

0
  1. 現在の app.settings セクションのコピーを作成します。

    NameValueCollection appSettings = new NameValueCollection(ConfigurationManager.AppSettings);
    
  2. Set/Add 関数を呼び出して必要な部分を変更します(「Add」関数は既存の値を上書きするのではなく、キーに新しい値を追加することに注意してください。一方、「Set」は常に新しいエントリを作成し、取得します既存の値を取り除きます):

    appSettings.Set("key name", "new value");
    
  3. デリゲートを作成します。

    MConfigurationManager.AppSettingsGet =
      () =>
      {
        return appSettings;
      };
    
于 2012-04-26T17:35:40.067 に答える