【问题标题】:mock out HttpContext in HtmlHelper extension method在 HtmlHelper 扩展方法中模拟出 HttpContext
【发布时间】:2012-11-07 09:34:49
【问题描述】:

如何在这个扩展方法中模拟出 HttpContext

public static class MyHtmlHelper
{
    public static string GetFullPath(this HtmlHelper helper)
    {
        var url = HttpContext.Current.Request.Url;

        return url.Scheme + "://" + url.AbsolutePath;
    }
}

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 moq rhino-mocks


    【解决方案1】:

    创建一个 HttpContextFactory,使用它,然后在您的测试中设置它。

    public static class HttpContextFactory
        {
            [ThreadStatic]
            private static HttpContextBase _mockHttpContext;
    
            public static void SetHttpContext(HttpContextBase httpContextBase)
            {
                _mockHttpContext = httpContextBase;
            }
    
            public static HttpContextBase GetHttpContext()
            {
                if (_mockHttpContext != null)
                {
                    return _mockHttpContext;
                }
    
                if (HttpContext.Current != null)
                {
                    return new HttpContextWrapper(HttpContext.Current);
                }
                return null;
            }
        }
    

    然后在你的代码中:

    var url = HttpContextFactory.GetHttpContext().Request.Url;
    

    然后在您的测试中使用该属性作为接缝

    HttpContextFactory.SetHttpContext(HttpMocks.HttpContext());
    

    其中 HttpMocks 具有以下内容,并将针对您的测试进行调整:

    public static HttpContextBase HttpContext()
          {
              var context = MockRepository.GenerateMock<HttpContextBase>();
              context.Stub(r => r.Request).Return(HttpRequest());
              // and stub out whatever else you need to, like session etc
              return context;
          }
    
    
          public static HttpRequestBase HttpRequest()
          {
              var httpRequest = MockRepository.GenerateMock<HttpRequestBase>();
              httpRequest.Stub(r => r.Url).Return("/"); //or some test setting
              return httpRequest;
          }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 2010-10-27
      相关资源
      最近更新 更多