3

按照以下说明操作: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 失败。预期的:。实际:<(null)>。

是否可以模拟这个对象?

[编辑] 我也在使用试用版。

4

2 回答 2

3

我刚刚尝试了您的测试,它按预期工作:

// 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时,它​​会自动设置拦截器(如果尚未设置)。

[注:我使用的是最新版本]

于 2011-12-13T08:29:28.117 回答
0

来源:http ://www.telerik.com/community/forums/justmock/general-discussions/problems-mocking-the-configurationmanager-appsettings.aspx

官方回应是,这似乎只是 MSTest 的问题。

于 2011-12-14T19:46:56.370 回答