【发布时间】:2011-06-30 11:50:00
【问题描述】:
我正在寻找一种使用 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 的方式行事的帮助将不胜感激。
【问题讨论】:
-
您使用的是哪个版本的 Moles?是偶然的 v0.94.51023.0 吗?该版本和 ConfigurationManager 存在问题。您是否尝试过使用 v0.94.51006.1?
-
谢谢马特,我确实在使用 0.94.51023.0。我已尝试获取 51006.1,以便查看该版本中是否存在问题,但无法在任何地方找到下载。我现在设法将我的问题缩小到静态构造函数。 Moles 在实例成员中正确地模拟了 ConfigurationManager,但是当从静态构造函数调用 ConfigurationManager 时,Moles 没有正确地模拟它。我已经针对这个问题发布了一个单独的帖子:stackoverflow.com/questions/6015173/…
标签: mocking appsettings configurationmanager moles typemock