在类中访问Mocked Request.ServerVariables

时间:2011-12-05 09:54:53

标签: c# mocking request.servervariables

我已经模拟了Controller中使用的服务器变量。

request.SetupGet(x => x.ServerVariables)
    .Returns(new System.Collections.Specialized.NameValueCollection
    {
        {"SERVER_NAME","localhost"}, 
        {"SCRIPT_NAME","localhost"}, 
        {"SERVER_PORT","80"}, 
        {"HTTPS","www.melaos.com"}, 
        {"REMOTE_ADDR","127.0.0.1"}, 
        {"REMOTE_HOST","127.0.0.1"} 
    });

我可以在Controller中获取Server变量的值,但不能在Model类中获取。为什么会这样?

在Controller和Model中获取值的唯一区别是在Controller中我们编写HttpContext.Request.ServerVariables而在Model中编写HttpContext.Current.Request.ServerVariables

它们有什么不同吗?如何在模型中获取这些值。

1 个答案:

答案 0 :(得分:3)

  

在Model中我们编写HttpContext.Current.Request.ServerVariables。

HttpContext.Current是问题所在。它是一个静态属性,您无法模拟,也无法在ASP.NET上下文之外使用,例如单元测试。因此,如果您使用HttpContext.Current,则无法对您的应用程序进行单元测试。这就是说你不应该在模型中使用任何HTTP特定的工件。您应该直接将控制器中的值传递给模型,以便模型不会尝试获取它们。