当我需要传入HttpResponse时,如何测试第三方框架

时间:2009-10-09 15:55:38

标签: c# asp.net testing httpresponse

我有一个第三方框架,我用来编写excel文档并让用户下载它。

问题是用户正在尝试导出大量记录,并且它正在抛出OutOfMemoryException。

我正在尝试编写一个测试来验证这是在第三方框架中发生而不是在我的代码中,但是Save方法将HttpResponse对象作为方法之一。

如何获取/模拟/ HttpResponse对象传递的任何内容?

使用示例:

excel.Save("test.xls", 
    OpenType.OpenInExcel, 
    FileType.Excel2003,
    HttpContext.Current.Response);

显然HttpContext.Current.Reponse在单元测试中不起作用,因此我的问题。

2 个答案:

答案 0 :(得分:2)

.Net 3.5 SP1中的HttpRequestBase是为此目的而设计的,但除非第三方代码使用它,否则对您没有任何帮助。 (这是替代品,因此使用起来并不难)

如果其他代码不使用它,您可以尝试在Cassini中托管代码并通过HTTP请求代码。

答案 1 :(得分:1)

[免责声明:我在Typemock工作]

您不需要拥有实际的HttpResponse对象,而是使用Isolator创建 HttpResponse 类型的虚假实例,并在时返回调用HttpContext.Current.Response

var fake = Isolate.Fake.Instance<HttpResponse>();
Isolate.WhenCalled(() => HttpContext.Current.Response).WillReturn(fake);

您可以使用 Isolate.WhenCalled 设置假对象的属性并更改其行为。

这种方法的优点是你不需要设置复杂的环境,实际上你可以在一个简单的单元测试中使用这个代码。