使用JustMock模拟ConfigurationManager.AppSettings

时间:2011-12-13 03:12:55

标签: c# justmock

遵循以下指示: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]我也在使用试用版。

2 个答案:

答案 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)

相关问题