模拟索引属性的摩尔人

时间:2011-06-30 11:50:01

标签: mocking appsettings configurationmanager moles typemock

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

         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模拟配置管理器时,我的测试通过,但是当我使用Moles版本(看起来它应该做同样的事情)时,它失败意味着Moles必须以TypeMock不会影响ConfigurationManager类的方式“T

关于我如何使用鼹鼠来表现出与TypeMock一样的行为的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

  1. 制作当前app.settings部分的副本:

    NameValueCollection appSettings = new NameValueCollection(ConfigurationManager.AppSettings);
    
  2. 通过调用Set / Add函数修改所需的部分(请记住,'添加'功能不会覆盖现有值,但会为键添加新值。另一方面,'设置'始终创建新条目并删除现有值>:

    appSettings.Set("key name", "new value");
    
  3. 创建委托:

    MConfigurationManager.AppSettingsGet =
      () =>
      {
        return appSettings;
      };