按照以下网址的指示:http://www.telerik.com/help/justmock/advanced-usage-static-mocking.html
我没有成功模拟 ConfigurationManager.AppSettings。这是我正在使用的代码...
[TestMethod]
public void my_test()
{
// Arrange
var appSettings = new NameValueCollection {
{ "test1", "one" }
};
Mock.Arrange(() => ConfigurationManager.AppSettings)
.Returns(appSettings)
.MustBeCalled();
// Act
var test1 = ConfigurationManager.AppSettings["test1"];
// Assert
Assert.AreEqual("one", test1);
}
这是我收到的错误。
Assert.AreEqual 失败。预期的:。实际:<(空)>。
是否可以模拟这个对象?
[edit] 我也在使用试用版。
最佳答案
我刚刚尝试了您的测试,它按预期工作:
// Arrange
var appSettings = new NameValueCollection { { "test1", "one" } };
Mock.Arrange(() => ConfigurationManager.AppSettings)
.Returns(appSettings)
.MustBeCalled();
// Act
var test1 = ConfigurationManager.AppSettings["test1"];
// Assert
Assert.AreEqual("one", test1);
请确保 Configuration.AppSettings 尚未在项目的某些静态构造函数中调用。
这里要注意 .net 探查器在 OnJITCompilationStarted 期间进行拦截,并且它只针对给定成员触发一次。
此外,请确保您的探查器配置正确,并安装了 VS 的 JM 插件。您可以通过 Mock.IsProfilerEnabled 检查分析器是否已启用。
最后,您通常不需要使用 Mock.SetupStatic(#TARGET_TYPE#),除非您正在执行严格的模拟或想要为给定类型伪造静态构造函数。当您执行 Mock.Arrange 时,它会自动设置拦截器(如果尚未设置的话)。
[注:我用的是最新版]
关于c# - 使用 JustMock 模拟 ConfigurationManager.AppSettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8483899/