遵循以下指示: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]我也在使用试用版。
答案 0 :(得分:2)
我刚试过你的测试,它按预期工作:
// 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 时,它会自动设置拦截器,如果还没有。
[注意:我使用的是最新版本]
答案 1 :(得分:0)