【问题标题】:How do I test a third party framework when I need to pass in an HttpResponse需要传入 HttpResponse 时如何测试第三方框架
【发布时间】:2015-09-21 09:11:35
【问题描述】:

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

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

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

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

使用示例:

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

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

【问题讨论】:

  • 它是在ASP.NET中,但我是用C#写的,我会添加一个标签。

标签: c# asp.net testing httpresponse


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 2017-02-23
      • 2016-06-22
      相关资源
      最近更新 更多