我有一个Http处理程序的单元测试。在其中我创建了一个HttpResponse
对象并将其传递给我的一个Http处理程序的方法。
我的一项测试尝试验证响应标头是否已正确设置:
Assert.AreEqual( "gzip", response.Headers["Content-Encoding"]);
但是,Headers
属性会抛出PlatformNotSupportedException
消息“此操作需要IIS集成管道模式”。
奇怪的是,据我所知,该异常与设置响应标头有关 - 而不是阅读它们。我正在使用TDD,所以我没有在任何地方(尚未)设置标题,但我仍然得到例外。
为什么我会收到此异常,是否有更好或更好的单元测试响应标头的方法?
答案 0 :(得分:4)
来自Response.Headers documentation:
说明
仅支持Headers属性 与IIS 7.0集成管道 模式和至少.NET Framework 3.0。当您尝试访问Headers属性和其中任何一个 两个条件不符合,a PlatformNotSupportedException是 抛出。
除非你在这些条件下运行,否则基本上你甚至无法尝试访问它。
如果我是你,我会为你的处理程序创建一个接受HttpContextBase对象和use a mock的构造函数,以便正确测试你的标题。
答案 1 :(得分:2)
我不确定获得,但我的预感是你的运气不好。关于如何单元测试响应头的问题。良好...
HttpContext及其所有邪恶的spawn都是TDD的常见问题。他们希望IIS能够存在,它们是密封的,因此您可以扩展或模拟它们。邪恶的邪恶。我们通常使用这些小混蛋来编写我们自己的包装器,其中包含一个接口,比如说IHttpContext。然后你就拥有自己的HttpContext并委托对它的所有调用。然后在您的应用程序中每个人都使用该界这解决了您与微软密封类交互的问题,因为您可以替代模拟或存根或其他任何东西。
至于如何测试实际的具体httpContext(或响应或请求),我建议你不需要。 Microsoft应负责测试自己的类。只要你测试自己与它的互动,你应该是hunky-dory