【问题标题】:Unable to examine reponse headers in unit test无法在单元测试中检查响应标头
【发布时间】:2009-12-22 16:27:43
【问题描述】:

我有一个 Http 处理程序的单元测试。在其中,我创建了一个 HttpResponse 对象并将其传递给我的 Http 处理程序的方法之一。

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

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

但是,Headers 属性会抛出 PlatformNotSupportedException 消息“此操作需要 IIS 集成管道模式”。

奇怪的是,据我了解,该异常与 setting 响应标头有关 - 不阅读它们。我正在使用 TDD,所以我还没有在任何地方设置标题,但我仍然遇到了异常。

为什么我会收到此异常,是否有更好或更好的方法来对响应标头进行单元测试?

【问题讨论】:

    标签: asp.net unit-testing nunit


    【解决方案1】:

    来自Response.Headers documentation:

    备注

    仅支持 Headers 属性 使用 IIS 7.0 集成管道 模式和至少 .NET Framework 3.0。当您尝试访问 Headers 属性和其中任何一个时 两个条件不满足,一个 PlatformNotSupportedException 是 扔了。

    除非您在这些条件下运行,否则您甚至无法尝试访问它。

    如果我是你,我会为你的 Handler 创建一个构造函数,它接受 HttpContextBase 对象和 use a mock 以便正确测试你的标题。

    【讨论】:

      【解决方案2】:

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

      HttpContext 及其所有邪恶的产物是 TDD 的一个长期问题。他们希望 IIS 存在,它们是密封的,因此您可以扩展或模拟它们。恶恶恶。我们通常对这些小混蛋做的是编写我们自己的包装器,并为它们提供一个接口,比如 IHttpContext。然后您就拥有自己的 HttpContext 并将所有调用委托给它。然后在您的应用程序中,每个人都使用该界面。这解决了您与 Microsoft 的密封类交互的问题,因为您可以替换模拟或存根或其他任何东西。

      至于如何测试实际的具体 httpContext(或响应或请求),我建议您不需要。微软应该负责测试他们自己的类。只要你测试你自己与它的交互,你就应该很聪明

      【讨论】:

      • 在阅读您的答案之前,我实际上已经提取了一个 IHttpContext 接口。 +1 在我的脑海里 :)
      • 对于遇到此问题的任何人。现在有许多有用的抽象项目可以用来促进@ryber 的建议;包括来自微软的一个。这使得单元测试 HttpContext 变得更加容易。也可以使用自托管服务器在组件级别进行测试,并且建议:搜索(自托管 ASP.NET 或 OWIN 自托管)
      猜你喜欢
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多