1

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

问题是用户试图导出大量记录,并且抛出了 OutOfMemoryException。

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

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

示例使用:

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

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

4

2 回答 2

2

.Net 3.5 SP1 中的HttpRequestBase就是为此目的而设计的,但除非第三方代码使用它,否则它对您没有任何好处。(它是一个插入式替代品,所以它不难使用)

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

于 2009-10-09T16:05:37.017 回答
1

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

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

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

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

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

于 2009-10-09T16:04:47.563 回答