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

的问题是,用户试图导出大量的记录,并且它投掷一个OutOfMemoryException。

我试图写一个测试来验证,这是在第三方框架,而不是在我的代码发生,但保存方法接受一个HttpResponse对象的方法之一。

我如何获得/模拟/任何一个HttpResponse对象传递?

实施例使用:

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

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

有帮助吗?

解决方案

[声明:我在Typemock工作]

您不需要有一个实际的HttpResponse对象,而不是使用隔离来创建一个假实例类型的的HttpResponse 并将其返回时被调用的 HttpContext.Current.Response

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

您可以假冒对象上设置属性,并改变它使用的行为的 Isolate.WhenCalled 的。

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

其他提示

从.net 3.5 SP1的 HttpRequestBase 是专为这一目的,但除非第三方代码使用它,它不会对你有任何好处。 (这是一个简易替换,所以它不是很难使用)

如果其他代码不使用它,你可以尝试托管代码中卡西尼并请求它通过HTTP。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top