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

无法在单元测试中检查响应头

  •  4
  • ctford  · 技术社区  · 15 年前

    我有一个HTTP处理程序的单元测试。在里面我创造了一个 HttpResponse 对象并将其传递给我的HTTP处理程序的一个方法。

    我的一个测试试图验证响应头是否设置正确:

    Assert.AreEqual( "gzip", response.Headers["Content-Encoding"]);
    

    然而, Headers 属性引发 PlatformNotSupportedException 带着信息 “此操作需要IIS集成管道模式” .

    奇怪的是,据我所知,这个例外与 设置 回复邮件头-不读取邮件头。我正在使用TDD,所以我还没有在任何地方设置头文件,但是我仍然得到了例外。

    为什么我会得到这个异常,有没有一个好的或更好的方法来测试单元响应头?

    2 回复  |  直到 15 年前
        1
  •  4
  •   womp    15 年前

    Response.Headers documentation :

    评论

    仅支持Headers属性 与IIS 7.0集成管道 模式和至少.NET框架 3。当您尝试访问headers属性和其中一个属性时 不满足两个条件,a PlatformNotSupportedException是 投掷。

    基本上,你甚至不能尝试访问它,除非你在这些条件下运行。

    如果我是您,我将为接受 HttpContextBase 对象和 use a mock 以便正确测试您的邮件头。

        2
  •  2
  •   ryber    15 年前

    我不确定能不能得到,但我的预感是你运气不好。关于如何单元测试响应头的问题。好。。。

    HTTPContext及其所有的邪恶产物都是TDD的一个经常性问题。他们希望IIS在身边,它们是密封的,所以你可以扩展或模仿它们。邪恶邪恶邪恶。我们通常对这些小混蛋所做的就是用一个接口为他们编写我们自己的包装器,比如说IHttpContext。然后,您就拥有自己的httpContext并将所有调用委托给它。然后在你的应用程序中,每个人都使用这个界面。这解决了与Microsofts密封类交互的问题,因为您可以子初始化mock或stub或其他。

    至于如何测试实际的HTTPContext(或响应或请求),我建议您不必这样做。微软应该负责测试他们自己的类。只要你用它来测试你自己的互动,你就应该表现得很好。