0

我正在寻找一种方法来使用 Moles 在配置文件中“绕道”单个项目。我可以做这个:

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

这很好用,但是我尝试测试的类使用了一些其他配置设置,包括 ConfigSections 和 Moles detour 似乎已经打破了这一点。我只想替换一个特定的值,而不是整个部分。在 TypeMock 中,我可以这样做:

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

当我使用 TypeMock 模拟 configurationManager 时,我的测试通过了,但是当我使用 Moles 版本(看起来它应该做同样的事情)时它失败了,这意味着 Moles 必须以 TypeMock 没有的方式影响 ConfigurationManager 类。

任何有关我如何使用痣以按照 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 回答