使用JustMock模拟ConfigurationManager.AppSettings

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)>。

这个对象能被模拟吗?

[编辑] 我也在使用Trial。

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 时,它会自动设置拦截器(如果尚未设置)。
[注:我使用了最新版本]

奇怪的是,我仍然不能让它工作。也许试用版有限制?我直接从模板创建了一个新的JustMock测试项目,但仍无法通过测试。我甚至添加了这个(可以通过)Assert.IsTrue(Mock.IsProfilerEnabled); - joelnet


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接