2009-12-22 53 views
4

我有一个Http处理程序的单元测试。在它中,我创建了一个HttpResponse对象并将其传递给我的一个Http处理程序的方法。无法检查单元测试中的响应标头

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

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

然而,Headers物业抛出一个PlatformNotSupportedException与消息“此操作需要IIS综合管道模式”

奇怪的是,据我了解,该例外与设置响应头 - 不读它们。我正在使用TDD,因此我不会在任何地方设置标头(但),但我仍然得到例外。

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

回答

4

Response.Headers documentation

备注

页眉属性仅与IIS 7.0集成的管线 支持 模式和至少.NET Framework 3.0。当您尝试访问“标题”属性并且这两个条件中的任何一个不符合时, PlatformNotSupportedException将抛出 。

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

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

2

林不知道得到,但我的直觉是你的运气不好。在如何单元测试响应头的问题上。以及...

HttpContext及其所有邪恶的产卵是TDD的一个常见问题。他们希望IIS可以在周围,它们被密封起来以便扩展或嘲笑它们。邪恶邪恶。我们通常对这些小混蛋做的事情就是用我们自己的包装器来为他们写一个接口,比如说说IHttpContext。然后您只需拥有自己的HttpContext并将所有调用委托给它。然后在你的应用程序中,每个人都使用该界面这可以解决您与Microsofts密封类交互的问题,因为您可以使用模仿或存根或其他任何方式。

至于如何测试实际的具体httpContext(或响应或请求),我会建议你不需要。微软应该负责测试他们自己的类。只要您测试与它自己的作用,你应该是没说的

+0

在我阅读你的答案之前,我已经提取了一个IHttpContext接口。 +1在我头上:) – ctford 2009-12-23 20:20:27

+0

对于任何人遇到这个问题。现在有许多有用的抽象项目可以用来促进@ryber的建议;包括来自微软的一个。这使得单元测试HttpContext变得更容易。还可以使用自托管服务器在组件级别进行测试并推荐:搜索(自主主机ASP.NET或OWIN自主主机) – Ray 2016-12-15 16:36:12