代码之家  ›  专栏  ›  技术社区  ›  Rob

在单元测试中使用httpcontext

  •  13
  • Rob  · 技术社区  · 14 年前

    [TestMethod]
    public void GetPathTest()
    {
       var expected = System.IO.Path.GetFullPath(HttpContext.Current.Server.MapPath("~/Certificates/"));
       var path = _mockService.Setup(o => o.GetPath()).Returns(expected);
    }
    
    4 回复  |  直到 14 年前
        1
  •  17
  •   Anton    14 年前

    目前,我找不到我之前使用的HttpContext的完整包装器,但目前我们只是为一个空请求创建一个上下文,然后从那里开始,如下所示:

    SimpleWorkerRequest request = new SimpleWorkerRequest("","","", null, new StringWriter());
    HttpContext context = new HttpContext(request);
    

    然后在单元测试初始化或单元测试本身中(在创建预期之前),可以按如下方式设置当前HttpContext:

    HttpContext.Current = context;
    

    (编辑:顺便说一句,这都在VS2008框架3.5中)。

        2
  •  2
  •   EggyBach    14 年前

    您可以尝试查看为ASP.Net单元测试创建的属性,如

    [HostType("ASP.NET")]
    

    link to MSDN 写得很好

        3
  •  2
  •   Massimo Della Calce    9 年前

    您可以用以下属性装饰您的测试方法:

    [TestMethod]
    [HostType("ASP.NET")]
    [UrlToTest("http://localhost:xxxx/")]
    [AspNetDevelopmentServerHost("$(SolutionDir)\\xxx\\", "/")]
    public void TestMethod()
    {
       ...
    }
    

    在测试方法内部,您可以轻松访问HttpContext。 如果要调试,可以使用一些跟踪或中断指令System.Diagnostics.Debugger.Break()的调试执行

    public void TestMethod()
    {
       System.Diagnostics.Debugger.Break();
    
       ...
    }
    

    然后将调试器附加到进程,如MSDN所述: https://msdn.microsoft.com/en-us/library/vstudio/c6wf8e4z(v=vs.100).aspx

        4
  •  1
  •   Kieren Johnstone    14 年前

    我把这个贴出来作为参考。这不是一个简单的解决方案,并谈到Duck类型(如果它嘎嘎作响……):

    http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx

    http://haacked.com/archive/2007/09/09/ihttpcontext-and-other-interfaces-for-your-duck-typing-benefit.aspx

    它是相关的,值得一读;因为没有IHttpContext,所以不可能创建一个测试环境实现—除非您考虑在这里使用Duck类型库。虽然这不是一个直接的答案。

    希望有帮助。