c# - 使用 JustMock 模拟 ConfigurationManager.AppSettings

标签 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] 我也在使用试用版。

最佳答案

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

// 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/

相关文章:

c# - foreach 中的动态过滤(ASP.NET 和 EF)

c# - 获取所有迭代的捕获组

c# - 比较两个列表以搜索常见项目

c# - 在 ASP.NET MVC 中模拟一个简单的服务总线

c# - 二元表达式无法转换为 LINQ 中的谓词表达式

c# - 编写异步 Controller 并更新进度

c# - 模拟具体的 FileInfo 对象

c# - 为 ASP .NET MVC 创建单元测试时出现的问题

asp.net - 将 ActionResult 转换为 HttpNotFoundResult 返回 null